Чтобы сравнить строки на предмет равенства, вы должны использовать equals
объекта String | или equalsIgnoreCase
методы. Мы также увидим, почему мы не должны использовать ==
оператор для сравнения строк.
Если нам нужно сравнить две строки в 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 не совпадают.Если нам нужно сравнить две строки в 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
Связанный:
Эти операторы фактически проверяют ссылки, и поскольку несколько объектов 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()
.
Более того, мы не должны использовать ==
для сравнения строк, как ==
оператор проверяет ссылку, а не значение.