Зміст курсу
Основи Java
Основи Java
Пул Рядків, Метод Equals()
Метод equals()
У цьому розділі наведено короткий огляд методу equals()
. Цей метод використовується для порівняння об'єктів і часто застосовується до об'єктів типу String. Розглянемо приклад створення двох однакових змінних рядка та їх порівняння за допомогою ==
:
Main
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
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
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))); } }
Тепер ми можемо побачити, що маємо правильне порівняння.
Дякуємо за ваш відгук!