Сравнение строк и интернирование строк в Java - PullRequest
7 голосов
/ 08 октября 2010

Когда нужно сравнивать String s как объекты и когда следует использовать их equals метод?Чтобы убедиться, я всегда использую equals, но это не очень эффективно.В каких ситуациях я могу быть уверен, что string1 == string2 безопасен в использовании?

Спасибо!

Ответы [ 3 ]

16 голосов
/ 08 октября 2010

Вы должны почти всегда использовать equals. Вы можете быть уверены, что string1 == string2 будет работать, если:

  • Вы уже убедились, что у вас есть отличные значения другим способом (например, вы используете строковые значения, извлеченные из набора, но сравниваете их по какой-то другой причине)
  • Вы знаете, что имеете дело со строковыми константами во время компиляции
  • Вы вручную интернировали строки

По моему опыту, это случается не очень часто.

1 голос
/ 08 октября 2010

Из того, что я знаю о 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
0 голосов
/ 08 октября 2010

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

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

Используйте equals для сравнения строк.

...