Изучаем Java: сравнение строк
Работа с строками в Java может вызвать трудности у начинающих программистов, особенно когда речь идет о сравнении строк. В статье рассматриваются основные методы сравнения строк в Java и их особенности, чтобы помочь вам избежать распространенных ошибок.
Вы узнаете, как правильно использовать методы equals(), 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 trueString 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
Комментарии