1. Сравнение строк
Это все отлично. Но вы же видите, что строки s1
и s2
фактически одинаковые – они содержат одинаковый текст. Как сказать программе, чтобы при сравнении строк она смотрела не на адреса объектов String
, а на их содержимое?
Для этого в Java у типа String
есть специальный метод — equals
. Выглядит его вызов так:
строка1.equals(строка2)
Этот метод возвращает true
(истина), если строки одинаковые, и false
(ложь), если они не одинаковые.
Пример:
Код: | Примечание |
---|---|
|
|
Еще примеры:
Код | Пояснение |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Сравнение строк без учета регистра
В последнем примере вы увидели, что сравнение "Привет".equals("ПРИВЕТ")
дает false
. Действительно, строки-то не равны. Хотя...
Строки, конечно, не равны, но ведь в них написано одно и то же, только размер (регистр) букв отличается. Можно ли как-нибудь их так сравнить, чтобы размер букв при этом не учитывался? Ну чтобы "Привет".equals("ПРИВЕТ")
дало true
?
И ответ на этот вопрос — да. В Java у типа String
есть еще один специальный метод — equalsIgnoreCase
. Выглядит его вызов так:
строка1.equalsIgnoreCase(строка2)
Название метода переводится как сравнить, игнорируя регистр. В названии метода есть две вертикальные линии: первая — это L
маленькая, а вторая — это i
, только большая. Не перепутайте.
Пример:
Код: | Примечание |
---|---|
|
|
3. Пример сравнения строк
Приведем только один простой пример: нужно ввести с клавиатуры две строки и определить, одинаковые они, или нет. Вот как будет выглядеть этот код:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Одинаковые" : "Разные";
System.out.println(result);
4. Интересный нюанс сравнения строк
Есть один важный нюанс, о котором вам нужно знать.
Если Java-компилятор в вашем коде (именно в коде) найдет несколько одинаковых строк, для экономии памяти он создаст для них только один объект.
String text = "Это очень важное сообщение";
String message = "Это очень важное сообщение";
А вот что в результате будет в памяти:
И если в данном случае вы сравните между собой text == message
, получите true
. Так что не удивляйтесь.
А если вам вдруг очень нужно, чтобы ссылки были разные, вы можете написать так:
String text = "Это очень важное сообщение";
String message = new String ("Это очень важное сообщение");
Или так:
String text = "Это очень важное сообщение";
String message = new String (text);
В обоих этих случаях переменные text
и message
указывают на разные объекты, содержащие одинаковый текст.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ