Si vous utilisez l' new
mot-clé, un nouveau String
objet sera créé. Notez que les objets sont toujours sur le tas - la chaîne de la piscine n'est pas une zone de mémoire qui est distinct dans le tas.
La chaîne de la piscine est comme un cache. Si vous faites cela:
String s = "abc";
String p = "abc";
ensuite, le compilateur Java est assez intelligent pour ne faire qu'un seul String
objet, et s
et p
serez tous les deux en se référant à la même Chaîne de caractères de l'objet. Si vous faites cela:
String s = new String("abc");
ensuite, il y aura un String
objet dans la piscine, celui qui représente le littéral "abc"
, et il y aura un distinct String
objet, pas dans la piscine, qui contient une copie du contenu de l'objet mis en commun. Depuis String
est immuable en Java, vous n'êtes pas gagne rien en faisant cela; appelant new String("literal")
jamais fait sens en Java et est inutilement inefficace.
Notez que vous pouvez appeler intern()
sur String
objet. Cela mettra l' String
objet dans la piscine si elle n'est pas déjà là, et renvoie la référence à la mise en commun de la chaîne. (Si elle était déjà dans la piscine, elle retourne une référence à l'objet qui était déjà là). Voir la documentation de l'API pour que la méthode pour plus d'info.
Voir également la Chaîne de stage (Wikipedia).