String addition in Java showing unexpected behavior
java, string
Solution
String `s3` is being assigned to a compile-time constant which is exactly equivalent to `"abbc"`. Hence, `s2==s3` compares two identical string literals, which results in `true` since these literals are interned.
`s0+s1` is not a compile time constant, so a new string object is produced. Therefore, `s==s2` returns `false`.
In terms of byte code,
String s3="ab"+"bc";
becomes
LDC "abbc"
ASTORE 1
Notice that `"abbc"` is used directly.
Lastly, if you declare `s0` and `s1` to be `final`, then `s0+s1` would be a constant expression and `s==s2` would be true.
Problem
I have this code in Java : ``` String s0="ab"; String s1="bc"; String s2="abbc"; String s3="ab"+"bc"; String s=s0+s1; ``` When i try to compare s & s2 using `if(s==s2)`, it returns `false`, But on comparing s2 & s3 using, `if (s2==s3)` returns `true`. Why is the output not same in both the cases?