Строковые литералы, хранящиеся в пуле строк, уникальны? - PullRequest
1 голос
/ 29 сентября 2011

Я понимаю, что строки могут быть интернированы, но это ли действие, которое выполняется религиозно, когда создается новый объект строки?

Jls раздел 3.10.5 строковые литералы.

1 Ответ

6 голосов
/ 29 сентября 2011

Все String литералы входят в пул строк.В противном случае ваше приложение должно вызвать intern() для String, иначе оно не попадет в пул.

A String литерал - это строка, которая появляется в исходном коде с двойными кавычками:

String greeting = "Hello, ";
String s = greeting + name;

В этом примере "Hello, " является литеральной строкой.Это в интернате.На него также ссылается переменная greeting.

String, на который ссылается s, не является литералом и не входит в пул интерна ... если вы не сделаете этот вызов:

s = s.intern();
...