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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With