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