• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Tricky String Concatenation .

 
Mostafa Radwan
Greenhorn
Posts: 25
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi All !
Really this is a somehow a tricky question that i need a clear
explnation to it, consider the following code
(assumed inside some class method) :

//first case

//BUT if you change the first line to make the String world as final
//second case

so my questions are:
[Q1] why the output changes to "true" when variable world became final ?
[Q2] Are string created using operator '+' are String object created on the heap
( as new String()) or on the String pool (as string literals) ?
Thanks ...
 
Maulin Vasavada
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Mostafa
Q2: Strings are created on Heap when + is used
Q1: When we declare "final" variable then compiler knows that it is not going to be changed so it replaces its occurances with the value given to it. Now, if this happens then in case of final String world the .class file is written to have,
String s1 = "hello" + "world";
String s2 = "hello" + "world";
Now, here "hello" and "world" both are created on the Literal pool and so the summation result as well. Hence we get s1==s2,
BUT when the world is not final then s1 and s2 are different objects so s1==s2 returns false.
Also, try s1.intern() == s2.intern() when we don't have String world as final. You should see 'true' output as intern() method returns the internal presentation of the string content which is string literal in our case and the literals are same...
Regards
Maulin
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic