В этой статье вы узнаете, как сравнивать строки и проблемы, возникающие при сравнении строк с помощью оператора equals to
( =
).
Вам также могут понравиться: Что нужно делать, а чего нельзя делать в строках Java
Вступление
Это String
специальный класс в Java. Мы регулярно используем String в программах на Java, поэтому сравнение двух строк является обычной практикой в Java. В этой статье я попытался ответить на самые распространенные вопросы о строке, например: «Как сравнить строки в Java?»
Сравнение строк очень полезно во время таких процессов, как аутентификация, сортировка, сопоставление ссылок и т. Д.
Я перечислил три разных способа сравнения строк в Java.
-
Использование
equals()
метода (сравнение контента) -
Использование
==
оператора (сравнение ссылки на объект) -
Использование
compareTo()
метода (сравнение лексикографически строк)
1. Сравните строки, используя Equals()
метод
Таким образом, я использую .equals()
метод экземпляра класса String. Первоначально .equals()
метод является методом Object
класса, класс String переопределяет его.
equals()
Метод сравнения двух строк на равенство значений, являются ли они логически равными.
equals()
Метод в классе String принимает в качестве параметра другую строку и сравнивает ее с указанной строкой. Он возвращает true
если — и только если — строка параметра не равна нулю и содержит те же символы, что и указанная строка.
Джава
1
public boolean equals(Object anObject)
2
It compare this string with the argument strings and return true if the argument is not null and contains the same character as the specified string.
4
param -
6
another string
7
returns -
9
true - if argument is not null and it contains same characters as the specified string
11
false - if the argument is null or it does not contain same characters as the specified string
12
ex. firstString.equals(secondString)
14
// returns true if and only if the secondString is not null and contains the same characters as firstString.
Я попросил программу сравнить строки, используя equals()
метод ниже:
Джава
xxxxxxxxxx
1
/**
2
* A Java program to compare two strings using equsls()
3
* and equalsIgnoreCase() method of the String.
4
*
5
* @author Gaurav Kukade at coderolls.com
6
*/
7
public class CompareUsingEquals {
9
public static void main(String[] args) {
11
String firstString = "coderolls";
12
String secondString = "javablog";
13
String thirdString = "coderolls";
14
String fourthString = "CodeRolls";
15
System.out.println("Comparing strings using equals() and equalsIgnoreCase() method\n");
17
// Using equals() method
19
System.out.print("firstString.equals(secondString) : ");
20
System.out.println(firstString.equals(secondString));
21
System.out.print("firstString.equals(thirdString) : ");
23
System.out.println(firstString.equals(thirdString));
24
/*
26
* Using equalsIgnoreCase() method to ignore
27
* case consideration (i.e. Capital or small) of both the strings.
28
*/
29
System.out.print("firstString.equalsIgnoreCase(fourthString) : ");
30
System.out.println(firstString.equalsIgnoreCase(fourthString));
31
}
32
}
Вывод:
Джава
xxxxxxxxxx
1
Comparing strings using equals() and equalsIgnoreCase() method
2
firstString.equals(secondString) : false
4
firstString.equals(thirdString) : true
5
firstString.equalsIgnoreCase(fourthString) : true
2. Сравните строки с помощью ==
оператора
В String ==
оператор используется для сравнения ссылок на заданные строки в зависимости от того, ссылаются ли они на одни и те же объекты.
Когда вы сравниваете две строки с помощью ==
оператора, он возвращает, true
если строковые переменные указывают на один и тот же объект Java. В противном случае он вернется false
.
Я дал программу на Java для сравнения, используя ==
оператор ниже:
Джава
1
/**
2
* A Java program to compare strings using == operator.
3
*
4
* == operator ckecks whether both the strings referring
5
* to the same String Object.
6
*
7
* @author Gaurav Kukade at coderolls.com
8
*/
9
10
public class CompareUsingEqualsToOperator {
11
12
public static void main(String[] args) {
13
14
String firstString = "coderolls";
15
String secondString = "javablog";
16
String thirdString = "coderolls";
17
18
// creating new String object with the same value as firstString or thirdString
19
String fourthString = new String("coderolls");
20
21
System.out.println("Comparing strings using == operator \n");
22
23
System.out.print("firstString == secondString : ");
24
System.out.println(firstString == secondString);
25
26
/*
27
* Here firstString and thirdString is referring to the same String object
28
* hence it will print 'true'.
29
*/
30
System.out.print("firstString == thirdString : ");
31
System.out.println(firstString == thirdString);
32
33
/*
34
* Here firstString and fourthString have same value
35
* but they are referring to the different String object.
36
*
37
* hence it will print 'false'
38
*/
39
System.out.print("firstString == fourthString : ");
40
System.out.println(firstString == fourthString);
41
}
42
43
}
Вывод:
Джава
xxxxxxxxxx
1
Comparing strings using == operator
2
firstString == secondString : false
4
firstString == thirdString : true
5
firstString == fourthString : false
Проблемы с использованием ==
оператора для сравнения строк
Большинство начинающих Java-разработчиков допускают эту ошибку, сравнивая две строки с помощью ==
оператора.
Логически, они должны проверить, содержит ли обе строки одну и ту же последовательность символов или нет.
В Java Strings ==
оператор используется для проверки ссылки как на строковые объекты, так и на equals()
метод, используемый для проверки равенства значений обеих строк.
==
- проверяет равенство ссылок
equals()
- проверяет равенство значений
Когда мы присваиваем строковое значение строковой переменной, JVM проверит, присутствует ли строка с таким же значением в пуле строк или нет. Если его нет в пуле строк, он будет добавлен в пул констант и будет возвращена ссылка на этот строковый объект.
Если он присутствует в пуле строк, возвращается ссылка на адрес памяти этого строкового объекта.
На следующем рисунке показано наглядное объяснение того же.
firstString
» указывает на строку «coderolls» в пуле строк.Если мы присваиваем равное значение другой строковой переменной, JVM проверяет, присутствует ли строка с этим значением в пуле строковых констант.
Поскольку строковый объект с этим значением уже создан на предыдущем шаге, другая строковая переменная начинает ссылаться на ранее созданный экземпляр строкового объекта.
На следующем рисунке показано графическое объяснение для ' firstString
' и ' secondString
', указывающих на строку «coderolls» в пуле строк.
Когда мы создаем строку с помощью
new
оператора, новый строковый объект создается и сохраняется в пространстве кучи Java.Выше мы можем видеть «
firstString
» и «secondString
», указывающие на coderolls
строку «» в пуле строк, и «
thirdString
», указывающие на «coderolls
» в пространстве кучи Java.
Вывод:
Джава
xxxxxxxxxx
1
Comparing strings using compareTo() and compareToIgnoreCase() method
2
firstString.compareTo(secondString) : 7
4
firstString.compareTo(thirdString) : -9
5
secondString.compareToIgnoreCase(fourthString) : 0
Я написал подробную статью о том, как сравнивать строки лексикографически в Java, если вы хотите узнать больше.
Заключение
Мы можем сравнить строки, используя способы, приведенные ниже:
- Используя
equals()
метод:equals()
метод в строках, используемый для проверки равенства строковых значений, содержат ли они одинаковую последовательность символов. - Используя
==
operator:==
operator используется для проверки ссылочного равенства двух строк, указывают ли они на один и тот же строковый объект. - Используя
compareTo()
метод:compareTo()
метод, используемый для проверки строк лексикографически, то есть в алфавитном порядке. Проверьте подробные статьи о том, как сравнивать строки лексикографически .
Большинство начинающих Java-разработчиков допускают ошибки при сравнении строк. Они хотят проверить содержимое строки, но они используют ==
оператор, чтобы проверить это.
Всегда рекомендуется использовать equals()
метод для сравнения строки на основе ее содержимого.
Если у вас есть какие-либо вопросы о приведенных выше блоках кода, пожалуйста, запишите их в разделе комментариев ниже. Кроме того, дайте мне знать, если у вас есть какой-либо другой способ сравнить две строки в Java в разделе комментариев.
Эта статья первоначально опубликована на coderolls.com/compare-strings-in-java .
Дальнейшее чтение
Что нужно и чего не нужно в Java-строках
Учебники по Java-строкам: виртуозность Java-строк