Вопрос сводится к этому коду:
// setup
String str1 = "some string";
String str2 = new String(str1);
assert str1.equals(str2);
assert str1 != str2;
String str3 = str2.intern();
// question cases
boolean case1 = str1 == "some string";
boolean case2 = str1 == str3;
Предоставляет ли Java-стандарт какие-либо гарантии относительно значений case1
и case2
?
Конечно, ссылка на соответствующую часть спецификации Java будет приятной.
Да, я посмотрел на все "похожие вопросы", найденные SO, и не нашел дубликатов, так как я не нашел ответа на этот вопрос. И нет, дело не в ошибочной идее "оптимизации" сравнения строк, заменив equals
на ==
.