Сравнение строк и интернирование строк в Java
Когда нужно сравнивать String
s как объекты и когда следует использовать их equals
метод? Чтобы убедиться, я всегда использую equals
, но это не кажется очень эффективным. В каких ситуациях я могу быть уверен, что string1 == string2
безопасно использовать?
Спасибо!
3 ответа
Вы должны почти всегда использовать equals
, Вы можете быть уверены, что string1 == string2
будет работать, если:
- Вы уже убедились, что получили разные значения каким-либо другим способом (например, вы используете строковые значения, извлеченные из набора, но сравниваете их по какой-то другой причине)
- Вы знаете, что имеете дело со строковыми константами времени компиляции
- Вы вручную интернировали строки
По моему опыту, это случается не очень часто.
Из того, что я знаю о Java, string1==string2
будет истинным, только если ссылки на эти объекты одинаковы. Взгляните на следующий случай
String string1 = new String("Bob");
String string2 = new String("Bob");
string1 == string2; // false, they are seperate objects
string1 = string2; // asigning string1 to string2 object
string1 == string2; // true, they both refer to the same object
Вы можете использовать только ==
для сравнения, если вы уверены, что объекты одинаковы.
Например, это может произойти, если у вас была последняя статическая переменная String. Вы можете быть уверены, что сравнение будет между одним и тем же объектом.
Придерживаться equals
для сравнения строк.