Сравнение строк и интернирование строк в 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

Вы можете использовать только == для сравнения, если вы уверены, что объекты одинаковы.

например, это может произойти, если у вас есть конечная статическая строковая переменная. Вы можете быть уверены, что сравнение будет между одним и тем же объектом.

палка с equals для сравнения строк.