2010-10-07 2 views
7

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

Спасибо!

+3

String.equals() эффективен. Первое, что нужно проверить, это string1 == string2. (На самом деле Object.equals() проверяет это.) –

+0

Но, конечно же! Как * глупость меня. Это очень очевидная вещь. И высокоэффективный, как вы говорите. Никогда. * Позор мне! * Спасибо! –

ответ

16

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

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

Это действительно не бывает очень часто, в моем опыте.

+0

Спасибо, Джон, ты всегда делал вещи просто и ясно. –

+1

Абсолютно правильный ответ. Использование '==', потому что equals() неэффективно - отличный пример преждевременной оптимизации. – DJClayworth

+0

И String.intern() достаточно медленный, чтобы в большинстве случаев быть бесполезным для производительности. – Darron

1

Из того, что я знаю о Java, string1==string2 будет true, если ссылки на эти объекты одинаковы. Взгляните на следующий случай

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 
+2

Первое сравнение будет * not * быть ложным, потому что это * не * отдельные объекты. Строковые литералы интернированы в Java. – sepp2k

+0

Первое сравнение должно возвращать false в этом случае - Строка string1 = new («Боб»); Строка string2 = новая («Боб»); – stratwine

+0

Я отредактирую свой ответ, чтобы сделать его более четко определенным. Я думал, что могу столкнуться с этой проблемой с Java. – Anthony

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^