Oui, si un String
est formé par deux concaténer String
littéraux il sera également interné.
De l'JLS:
Ainsi, le programme de test constitué par l'unité de compilation (§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"; }
produit la sortie:
true
true
true
true
false
true
Les lignes importantes sont 4 et 5. 4 représente ce que vous demandez dans le f premier cas; 5 vous montre ce qui se passe si l'on n'est pas littéral (ou plus généralement, une constante de compilation).
" String pool ", ou voulez-vous dire le pool constant? –
J'imagine qu'il veut dire que le pool String est défini comme le pool constant – danben
mmmhh J'ai dit "pool de chaînes" parce que c'est comme ça que c'est référencé par String.intern() doc * .. Un pool de chaînes, initialement vide ... * (http://java.sun.com/javase /6/docs/api/java/lang/String.html#intern%28%29) Mais, je ne suis pas sûr si cela devrait être appelé "pool constant" .Est-ce que cela devrait? – OscarRyz