Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Пул Рядків, Метод Equals() | Рядок
Основи Java
course content

Зміст курсу

Основи Java

Основи Java

1. Початок Роботи
2. Базові Типи Та Операції
3. Цикли
4. Масиви
5. Рядок

book
Пул Рядків, Метод Equals()

Метод equals()

У цьому розділі наведено короткий огляд методу equals(). Цей метод використовується для порівняння об'єктів і часто застосовується до об'єктів типу String. Розглянемо приклад створення двох однакових змінних рядка та їх порівняння за допомогою ==:

java

Main

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String first = new String("string"); String second = new String("string"); System.out.println(first == second); } }

У відповіді ми отримуємо "false", але чому? Значення обох змінних рядка однакові та дорівнюють "string". Це тому, що == порівнює посилання на об'єкти в пам'яті, а не самі значення. Наші об'єкти знаходяться поза String pool.

String pool

Що таке String Pool? Це область у heap-пам'яті, яка виділяється під час створення об'єктів рядка. Якщо ми створюємо об'єкт String зі значенням "string", а потім створюємо ще один об'єкт String з таким самим значенням, обидва об'єкти будуть посилатися на один і той самий об'єкт у пам'яті, який розташований у string pool.

Чому ж у нашому випадку ми отримали "false"? Це сталося тому, що ми обійшли string pool, створивши об'єкти за допомогою синтаксису String first = new String("string");. Коли ми створюємо об'єкт String за допомогою іншого синтаксису, наприклад, String first = "string";, він буде розміщений у string pool.

Розглянемо приклад коду:

java

Main

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first == second)); System.out.println("Result of comparing first and third: " + (first == third)); } }

Розгляньмо схему, яка пояснює, як це працює, і які об'єкти знаходяться у String Pool.

Як порівнювати значення рядків у String Pool та поза ним? Для цього Java надає метод equals, який порівнює значення наших об'єктів String, а не їх посилання. Розгляньмо приклад коду, де ми порівнюємо рядки за допомогою методу equals, а не ==.

java

Main

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first.equals(second))); System.out.println("Result of comparing first and third: " + (first.equals(third))); } }

Тепер ми можемо побачити, що маємо правильне порівняння.

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

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

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

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

Запитати АІ

expand
ChatGPT

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

course content

Зміст курсу

Основи Java

Основи Java

1. Початок Роботи
2. Базові Типи Та Операції
3. Цикли
4. Масиви
5. Рядок

book
Пул Рядків, Метод Equals()

Метод equals()

У цьому розділі наведено короткий огляд методу equals(). Цей метод використовується для порівняння об'єктів і часто застосовується до об'єктів типу String. Розглянемо приклад створення двох однакових змінних рядка та їх порівняння за допомогою ==:

java

Main

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String first = new String("string"); String second = new String("string"); System.out.println(first == second); } }

У відповіді ми отримуємо "false", але чому? Значення обох змінних рядка однакові та дорівнюють "string". Це тому, що == порівнює посилання на об'єкти в пам'яті, а не самі значення. Наші об'єкти знаходяться поза String pool.

String pool

Що таке String Pool? Це область у heap-пам'яті, яка виділяється під час створення об'єктів рядка. Якщо ми створюємо об'єкт String зі значенням "string", а потім створюємо ще один об'єкт String з таким самим значенням, обидва об'єкти будуть посилатися на один і той самий об'єкт у пам'яті, який розташований у string pool.

Чому ж у нашому випадку ми отримали "false"? Це сталося тому, що ми обійшли string pool, створивши об'єкти за допомогою синтаксису String first = new String("string");. Коли ми створюємо об'єкт String за допомогою іншого синтаксису, наприклад, String first = "string";, він буде розміщений у string pool.

Розглянемо приклад коду:

java

Main

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first == second)); System.out.println("Result of comparing first and third: " + (first == third)); } }

Розгляньмо схему, яка пояснює, як це працює, і які об'єкти знаходяться у String Pool.

Як порівнювати значення рядків у String Pool та поза ним? Для цього Java надає метод equals, який порівнює значення наших об'єктів String, а не їх посилання. Розгляньмо приклад коду, де ми порівнюємо рядки за допомогою методу equals, а не ==.

java

Main

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first.equals(second))); System.out.println("Result of comparing first and third: " + (first.equals(third))); } }

Тепер ми можемо побачити, що маємо правильне порівняння.

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

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

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

Секція 5. Розділ 7
Ми дуже хвилюємося, що щось пішло не так. Що трапилося?
some-alt