Why does the str10 result as false ? Line no : 11
The String expression produced by the + operator in line 7 isn't a compile time constant.
Because on line no 7 here this is not a constant expression so String concatenation is performed where
Santosh Kumar Nayak wrote:Why does the str10 result as false ? Line no : 11
ergo new object is created although same content String present in String constant pool (which is created by constant expression on line 3 and referenced by hello reference variable ) so str10 has different reference than hello.
JLS 9 15.18.1. String Concatenation Operator + wrote:The result of string concatenation is a reference to a String object that is the concatenation of the two operand strings. The characters of the left-hand operand precede the characters of the right-hand operand in the newly created string.
The String object is newly created (§12.5) unless the expression is a constant expression (§15.28).
If you compare then It will return true because both have String values of constant expressions which are interned.
Produces an object at runtime and it is not in String Pool
Yes It produces a new String object having value "Hello". If you declare str8 and str9 final then becomes compile time constant and reference of String "Hello" from String pool is returned so str10 == hello and str10 == str5 will return true. I had tried different combinations and also drawn an illustration for that, will see If I find in my documentation will post soon.
Santosh Kumar Nayak wrote:So Produces an object at runtime and it is not in String Pool