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

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

Метод equals()

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

Main.java

Main.java

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.

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

Main.java

Main.java

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, а не ==.

Main.java

Main.java

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

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

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

Метод equals()

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

Main.java

Main.java

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.

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

Main.java

Main.java

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, а не ==.

Main.java

Main.java

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