Изучаем Java: сравнение строк
Класс String Java содержит ряд методов для сравнения строк. Ниже приведены некоторые методы класса string java:
- Оператор ==;
- Метод equals();
- equalsIgnoreCase;
- Метод compareTo().
Java string методы - использование оператора ==
Оператор == проверяет ссылки, а не значения. Это означает, что он проверяет, являются ли сравниваемые элементы одним и тем же объектом. Если две переменные String указывают на один и тот же объект в памяти, сравнение возвращает true. В противном случае - false:
"Java" == "Java" //true
Здесь литералы интернируются компилятором и таким образом ссылаются на один и тот же объект:
new String("Java") == "Java" // false
Приведенные выше переменные String указывают на разные объекты:
new String("Java") == new String("Java") // false
Приведенные выше переменные String также указывают на разные объекты.
Оператор '==' не сравнивает строки в java, а только ссылки, на которые они строки.
Пример
class TestClass{
public static void main (String[] args){
// ссылается на один и тот же объект, возвращает true
if( "Java" == "Java" ){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
// указывает на другой объект, возвращает false
if(new String("Java") == "Java"){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
// указывает на другой объект, возвращает false
if(new String("Java") == new String("Java") ){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
}
}
Результат
Statement is true
Statement is false
Statement is false
Метод String equals()
В Java сравнение строк equals проверяет исходное содержимое строки. Он возвращает true, если параметр - это объект String, который представляет собой ту же строку символов, что и объект:
Objects.equals("Java", new String("Java")) //true
Если нужно проверить, имеют ли две строки одинаковое значение, можно использовать Objects.equals().
Пример
class TestClass{
public static void main (String[] args) {
String str1 = "Java";
String str2 = "Java";
String str3 = "ASP";
String str4 = "JAVA";
String str5 = new String("Java");
// оба равны, возвращают true
if(str1.equals(str2)){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
// оба не равны, возвращают false
if(str1.equals(str3)){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
// оба не равны, возвращают false
if(str1.equals(str4)){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
// оба равны, возвращают true
if(str1.equals(str5)){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
}
}
Результат
Statement is true
Statement is false
Statement is false
Statement is true
String equalsIgnoreCase
Метод equalsIgnoreCase() осуществляет Java сравнение строк лексикографически, игнорируя различия регистра. Значение true возвращается только тогда, когда аргумент является объектом String, который представляет ту же последовательность символов, что и объект. Если нужно проверить строки на равенство без учета регистра, лучше использовать метод equalsIgnoreCase класса String.
Пример
class TestClass{
public static void main (String[] args){
String str1 = "Java";
String str2 = "JAVA";
// возвращает true, потому что оба равны без учета регистра
if(str1.equalsIgnoreCase(str2)){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
// возвращает false при чувствительности к регистру
if(str1.equals(str2)){
System.out.println("Statement is true");
}else{
System.out.println("Statement is false");
}
}
}
Результат
Statement is true
Statement is false
Метод String compareTo()
Метод compareTo() используется, когда нужно определить порядок строк лексикографически. Он сравнивает значения char аналогично методу equals(). Если две строки точно совпадают, метод compareTo() вернет значение 0 (результат = 0). При сравнении двух строк Java он возвращает положительное (результат > 0) целое число, если первый объект String следует за второй строкой. Метод compareTo() возвращает отрицательный результат (результат < 0), если первый объект String предшествует второй строке:
result1 == result2 :возвращает 0;
result1 > result2 :возвращает положительное значение;
result1 < result2 : возвращает отрицательное значение.
Пример
class TestClass{
public static void main (String[] args) {
String str1 = "Java";
String str2 = "Java";
String str3 = "ASP";
int val = 0;
val = str1.compareTo(str2);
System.out.println(val);
val = str1.compareTo(str3);
System.out.println(val);
val = str3.compareTo(str1);
System.out.println(val);
}
}
Результат
0
9
-9