Да, если String
сформирован путем объединения двух String
литералов , он также будет интернирован.
Из JLS:
Таким образом, тестовая программа, состоящая из
блок компиляции (§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"; }
производит вывод:
true
true
true
true
false
true
Важные строки - 4 и 5. 4 - это то, что вы спрашиваете в первом случае; 5 показывает, что происходит, если один не является литералом (или, в более общем смысле, константой времени компиляции).