What is the difference between an addition of String Literal and String Object?
For example
String s1 =\"hello\";
String s2 =\"hello1\";
Because s1 + s2 is not a constant expression, since s1 and s2 are not final, therefore its result is not interned, i.e. another object is created to represent it, so reference comparison produces false.
JLS 3.10.5 String Literals:
String literals-or, more generally, strings that are the values of constant expressions (§15.28)-are "interned" so as to share unique instances, using the method String.intern.
JLS 15.28 Constant Expression:
A compile-time constant expression is an expression denoting a value of primitive type or a String that does not complete abruptly and is composed using only the following:
- ...
- Simple names that refer to constant variables (§4.12.4).
JLS 4.12.4 defines final variables.
If you declare s1 and s2 as final, s3 == s5 would be true.