Сравнение строк и интернирование строк в Java

Когда нужно сравнивать Strings как объекты и когда следует использовать их 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 для сравнения строк.

Другие вопросы по тегам