Сравнение строк и интернирование строк в 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
Вы можете использовать только ==
для сравнения, если вы уверены, что объекты одинаковы.
например, это может произойти, если у вас есть конечная статическая строковая переменная. Вы можете быть уверены, что сравнение будет между одним и тем же объектом.
палка с equals
для сравнения строк.