Я знаю, что вы делаете
for (condition) {
String s = "hi there";
}
Только один экземпляр String
создается во всех итерациях, в отличие от String s = new String("hi there");
, который создаст новый экземпляр на каждой итерации.
Но, читая Effective Java от Джошуа Блоха: Глава 2, пункт 5 (стр. 20), он гласит:
Кроме того, гарантируется, что объект будет повторно используемый любым другим кодом, работающим на той же виртуальной машине, который имеет место с содержать тот же строковый литерал [JLS, 3.10.5].
AFAIK, который не говорит, имеет be тот же строковый литерал, он говорит, что содержит.
Чтение [JLS, 3.10.5] не может найти никакой точной ссылки на это, и у меня есть сомнения.
Предоставление этого фрагмента:
String s1 = "hi ";
String s2 = "there";
String s3 = "hi there";
Сколько экземпляров создано?
- 3 экземпляра (таким образом, фраза не очень точная).
- 2 экземпляра,
s1
иs2
(тогдаs3
создается повторное использование ссылокs1
иs2
)