Сравнение строк в Java
Содержание
Класс Java String имеет ряд методов сравнения строк. Ниже приведены некоторые из часто используемых методов:
Операторы == для сравнения, а не значения, равнозначны, что означает проверку того, являются ли они одним и тем же объектом. Если две переменные String указывают на один и тот же объект в памяти, сравнение возвращает true. В противном случае сравнение возвращает false.
"Java" == "Java" // true
Здесь литералы интернируются компилятором и, таким образом, ссылаются на один и тот же объект
new String("Java") == "Java" // false
Выше двух переменных String указывают на другой объект в памяти
new String("Java") == new String("Java") // false
Выше двух переменных String указывают на другой объект в памяти
Важно отметить, что оператор '==' не сравнивает содержимое внутри объектов String. Он сравнивает только ссылки, на которые указывают две строки.
Пример
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"); } // укажем на другой объект в памяти return false if(new String("Java") == "Java"){ System.out.println("Statement is true"); }else{ System.out.println("Statement is false"); } // укажем на другой объект в памяти return 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 String equals() проверяет исходное содержимое (т. Е. Те же значения) строки. Метод equal() возвращает 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
Java String equalsIgnoreCase Сравнивает две строки лексикографически, игнорируя различия в случае. Возвращает 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 (result is = 0). Он возвращает положительное (результат> 0) целое число, если первый объект String следует за второй строкой. Метод compareTo возвращает отрицательный результат (результат <0), если первый объект String предшествует второй строке.
result1 == result2 :returns 0 result1 > result2 :returns positive value result1 < result2 :returns negative value
Пример
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