В Java строковые литералы (голые "ABC"
вместо new String("ABC")
) интернированы .То есть в JVM хранится только одна копия, и это всегда та копия, которая используется.Вот почему они сравниваются равными при использовании ==
.
Следующие сравнения также всегда верны:
str1.intern() == str2.intern()
str1.intern() == str3
str2.intern() == str3
str1.intern() == str4
str2.intern() == str4