Операция сравнения
==
сопоставляет только ссылки на строки. Она выясняет, указывают ли ссылки на одну и ту же строку. Например, для строк
String s1 = "Какая-то строка";
String s2 = "Другая-строка";
сравнение
s1 == s2
дает в результате
false
.
Значение
true
получится, только если обе ссылки указывают на одну и ту же строку, например, после присваивания
si = s2
.
Интересно, что если мы определим
s2
так:
String s2 == "Какая-то строка";
то сравнение
s1 == s2
даст в результате
true
, потому что компилятор создаст только один экземпляр константы "Какая-то строка" и направит на него все ссылки.
Вы, разумеется, хотите сравнивать не ссылки, а содержимое строк. Для этого есть несколько методов.
Логический метод
equals (object obj)
, переопределенный из класса
object
, возвращает
true
, если аргумент
obj
не равен
null
, является объектом класса
string
, и строка, содержащаяся в нем, полностью идентична данной строке вплоть до совпадения регистра букв. В остальных случаях возвращается значение
false
.
Логический метод
equalsIgnoreCase(object obj)
работает так же, но одинаковые буквы, записанные в разных регистрах, считаются совпадающими.
Например,
s2.equals("другая строка")
даст в результате
false
, а
s2.equalsIgnoreCase("другая строка")
возвратит
true
.
Метод
compareTo(string str)
возвращает целое число типа
int
, вычисленное по следующим правилам:
Сравниваются символы данной строки
this
и строки
str
с одинаковым индексом, пока не встретятся различные символы с индексом, допустим
k
, или пока одна из строк не закончится.
В первом случае возвращается значение
this.charAt(k) - str.charAt(k),
т. е. разность кодировок Unicode первйх несовпадающих символов.
Во втором случае возвращается значение
this.length() - str.length()
, т. е. разность длин строк.
Если строки совпадают, возвращается 0.
Если значение
str