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

Стандартными средствами языка Java предусмотрено два способа сравнения строк между собой:

  • Сравнение с помощью методов equals / equalsIgnoreCase
  • Сравнение с помощью оператора равенства

Сравнение с помощью equals

Оператор String.equals() сравнивает строки семантически. Две строки будут равны между собой лишь в том случае, если они содержат одинаковые наборы символов:

String s1 = "test string";
String s2 = "test string";
String s3 = "TEST string";

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));

В первом случае сравниваются между собой идентичные строки, поэтому в консоль будет выведено значение «true». Во втором же случае строки неидентичны, поэтому будет выведено значение «false».

Для того, чтобы сравнивать строки, игнорируя регистр букв, воспользуемся методом equalsIgnoreCase:

String s1 = "test string";
String s2 = "test string";
String s3 = "TEST string";

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));

В данном случае в конмоль будет дважды выведено значение «true», так как строки равны между собой (игнорируя регистр букв).

Сравнение с помощью оператора равенства

Обычно строки в Java не сравниваются с помощью оператора равенства ==. А всё потому, что оператор равенства сравнивает именно значения переменных, но не строковые представления как таковые.

Рассмотрим следующий код:

String ps1 = "test string";
String ps2 = "test string";
String ps3 = new String("test string");
System.out.println(ps1 == ps2);
System.out.println(ps1 == ps3);

Здесь мы создали две переменных ps1 и ps2 с помощью строковых литералов. Это значит, что компилятор ещё на этапе компиляции присвоит им значения объектов из пула строк. А так как строки идентичны, обе переменные будут ссылаться на один и тот же экземпляр строки в пуле строк. В первом случае оператор равенства вернёт значение true, так как переменные ссылаются на один и тот же объект в памяти. Но всё обстоит иначе с переменной ps3 – ей присваивается значение новосозданного объекта new String("test string"), который не имеет никакого отношения к пулу строк. Переменные ps1 и ps3 будут указывать на разные объекты в памяти. Следовательно, оператор равенства вернёт значение false во втором случае.

Выводы

Для сравнения строк в Java используйте метода equals / equalsIgnoreCase, так как они сравнивают содержимой строковых обеъектов. Оператор равенства не используется для выявления идентичных строк, так как сравнивает значения переменных, которые указывают на объекты в памяти.

Ссылки

Как создать строку

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