Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Порівняння Рядків у Java | Рядки
Вступ до Java

Порівняння Рядків у Java

Свайпніть щоб показати меню

Порівняння — це та область, де Java починає поводитися трохи більш "низькорівнево", ніж очікується. Здається очевидним, що рядки можна порівнювати так само, як і числа — за допомогою ==. Адже якщо два рядки виглядають ідентично, чому б їм не бути рівними?

Проблема з ==

Якщо використовувати == з рядковими літералами, спочатку здається, що все працює правильно:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Обидві змінні вказують на один і той самий об'єкт у внутрішньому пулі рядків Java — коли той самий літерал з'являється знову, Java повторно використовує вже існуючий. Тому == повертає true.

А тепер трохи змінимо спосіб створення рядків:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Використання new String() вказує Java створювати повністю окремий об'єкт щоразу — навіть якщо вміст ідентичний. Оскільки == порівнює адреси в пам'яті, а не текст, він повертає false.

Головне правило: == не аналізує текст усередині рядка — він перевіряє, чи обидві змінні вказують на той самий об'єкт у пам'яті.

equals() — Порівняння фактичного вмісту

Якщо потрібно порівняти фактичний текст усередині двох рядків, використовуйте .equals(). Цей метод повністю ігнорує пам'ять і зосереджується лише на символах:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Навіть якщо order1 і order2 — це окремі об'єкти в пам'яті, .equals() порівнює їхній вміст і повертає true.

Чутливість до регістру з equals()

Java чутлива до регістру, тому навіть одна літера з різним регістром робить рядки нерівними:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" та "latte" розглядаються як різні рядки, тому результат — false.

equalsIgnoreCase() — Порівняння без урахування регістру

Якщо потрібно порівняти рядки, ігноруючи різницю між великими та малими літерами, використовуйте .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() розглядає "Latte" і "LATTE" як однакові та повертає true.

question mark

Що саме порівнює оператор == при використанні з рядками у Java?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Порівняння Рядків у Java

Порівняння — це та область, де Java починає поводитися трохи більш "низькорівнево", ніж очікується. Здається очевидним, що рядки можна порівнювати так само, як і числа — за допомогою ==. Адже якщо два рядки виглядають ідентично, чому б їм не бути рівними?

Проблема з ==

Якщо використовувати == з рядковими літералами, спочатку здається, що все працює правильно:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Обидві змінні вказують на один і той самий об'єкт у внутрішньому пулі рядків Java — коли той самий літерал з'являється знову, Java повторно використовує вже існуючий. Тому == повертає true.

А тепер трохи змінимо спосіб створення рядків:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Використання new String() вказує Java створювати повністю окремий об'єкт щоразу — навіть якщо вміст ідентичний. Оскільки == порівнює адреси в пам'яті, а не текст, він повертає false.

Головне правило: == не аналізує текст усередині рядка — він перевіряє, чи обидві змінні вказують на той самий об'єкт у пам'яті.

equals() — Порівняння фактичного вмісту

Якщо потрібно порівняти фактичний текст усередині двох рядків, використовуйте .equals(). Цей метод повністю ігнорує пам'ять і зосереджується лише на символах:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Навіть якщо order1 і order2 — це окремі об'єкти в пам'яті, .equals() порівнює їхній вміст і повертає true.

Чутливість до регістру з equals()

Java чутлива до регістру, тому навіть одна літера з різним регістром робить рядки нерівними:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" та "latte" розглядаються як різні рядки, тому результат — false.

equalsIgnoreCase() — Порівняння без урахування регістру

Якщо потрібно порівняти рядки, ігноруючи різницю між великими та малими літерами, використовуйте .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() розглядає "Latte" і "LATTE" як однакові та повертає true.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5
some-alt