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 вказують на різні об'єкти, що містять однаковий текст.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ