Как сравнить строки в Java

Чтобы сравнить строки на предмет равенства, вы должны использовать equals объекта String | или equalsIgnoreCase методы. Мы также увидим, почему мы не должны использовать == оператор для сравнения строк.



Сравнение строк с помощью метода equals ()

Если нам нужно сравнить две строки в java, а также позаботиться о оболочке строк, мы можем использовать equals() метод.

Например, следующий фрагмент кода определит, равны ли два экземпляра String для всех символов, включая регистр:


public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';

if (firstString.equals(secondString)) {

System.out.println('first and second strings are equal');
}

if (firstString.equals(thirdString)) {

System.out.println('first and third string are equal');
}
} }

Выход:

first and second strings are equal Примечание:Второй оператор печати не выполняется, потому что регистр firstString и thirdString не совпадают.

Сравнение строк с помощью метода equalsIgnoreCase ()

Если нам нужно сравнить две строки в java, но не заботиться о корпусе строк, мы можем использовать equalsIgnoreCase() метод.


Например, если в приведенном выше фрагменте кода мы заменили .equals() с .equalsIgnoreCase() метод, то выполняются оба оператора печати:

public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';

if (firstString.equalsIgnoreCase(secondString)) {

System.out.println('first and second strings are equal');
}

if (firstString.equalsIgnoreCase(thirdString)) {

System.out.println('first and third string are equal');
}
} }

Выход:

first and second strings are equal
first and third string are equal

Связанный:



Не используйте оператор == для сравнения строк

Примечание:При сравнении двух строк в java мы не должны использовать == или же знак равно операторы.

Эти операторы фактически проверяют ссылки, и поскольку несколько объектов String могут представлять одну и ту же строку, это может дать неправильный ответ.


Вместо этого используйте String.equals(Object) , который будет сравнивать объекты String на основе их значений.

public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test123';
String thirdString = new String('Test123');

if (firstString == secondString) {

System.out.println('first and second strings are equal');
}

if (firstString == thirdString) {

System.out.println('first and third strings are equal');
}
} }

Выход:

first and second strings are equal Примечание:Второй оператор печати не выполняется.

Сравнение строк с постоянными значениями

При сравнении String с постоянным значением вы можете поместить постоянное значение слева от equals, чтобы гарантировать, что вы не получите NullPointerException если другая строка равна нулю.

Например:


'baz'.equals(foo)

Пока foo.equals('baz') бросит NullPointerException если foo равно нулю, 'baz'.equals(foo) будет оцениваться как false.

Более удобочитаемая альтернатива - использовать Objects.equals(), при котором оба параметра проверяются на null:

например Objects.equals(foo, 'baz').



Сравнение строк в операторе переключения

Начиная с Java 1.7, можно сравнивать строковую переменную с литералами в операторе switch. Убедитесь, что строка не равна нулю, иначе она всегда будет выдавать NullPointerException. Значения сравниваются с использованием String.equals, т.е. с учетом регистра.


public class CompareTwoStrings {
public static void main(String[] args) {
String stringToSwitch = 'A';


switch (stringToSwitch) {

case 'a':


System.out.println('a');


break;




case 'A':


System.out.println('A'); //the code goes here


break;




case 'B':


System.out.println('B');


break;




default:


break;
}
} }

Заключение

В этом посте мы объяснили, как сравнивать строки в java с примерами кода. Когда имеет значение регистр строк, мы должны использовать .equals() а когда регистр не важен, мы должны использовать .equalsIgnoreCase().

Более того, мы не должны использовать == для сравнения строк, как == оператор проверяет ссылку, а не значение.