For instance
String s = "Hello" + " World";
I know there are two strings in the pool "Hello" and "World" but, does: "Hello World" go into the string pool?
If so, what about?
String s2 = new String("Hola") + new String(" Mundo");
How many strings are there in the pool in each case?
Yes, if a String
is formed by concatenating two String
literals it will also be interned.
From the JLS:
Thus, the test program consisting of the compilation unit (§7.3):
package testPackage;
class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " ");
System.out.println(hello == ("Hel"+lo).intern());
}
}
class Other { static String hello = "Hello"; }
and the compilation unit:
package other;
public class Other { static String hello = "Hello"; }
produces the output:
true
true
true
true
false
true
The important lines are 4 and 5. 4 represents what you are asking in the first case; 5 shows you what happens if one is not a literal (or more generally, a compile-time constant).
I believe in the first case the compiler will be clever and put the concatenated string in the pool (i.e. you'll have only 1 string there)
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