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