Как сравнивать строки
[Как сравнивать строки]
При разработке любых программ программист сталкивается с задачей сравнить две строки между собой.
Стандартными средствами языка 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, так как они сравнивают содержимой строковых обеъектов. Оператор равенства не используется для выявления идентичных строк, так как сравнивает значения переменных, которые указывают на объекты в памяти.
Ссылки
Как создать строку
Как сравнивать строки
При сравнении строк в Java, метод equals() проверяет на идентичность наборы символов, возвращая true только при полном совпадении, в то время как equalsIgnoreCase() игнорирует регистр букв. Это позволяет упростить сравнение строк, особенно если регистр не играет роли в различии. Понимание различий между этими методами помогает программистам выбирать подходящий способ сравнения строк в зависимости от поставленной задачи.