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