Зміст курсу
Основи Java
Основи Java
String Pool та метод 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? Це область в heap пам'яті, яка виділяється при створенні рядкових об'єктів. Якщо ми створимо об'єкт String зі значенням "string", а потім створимо інший об'єкт String з таким же значенням, то обидва об'єкти будуть посилатися на один і той же об'єкт в пам'яті, який знаходиться в String Pool.
Так чому ж у нашому випадку ми отримали "false"? Тому що ми обійшли пул рядків, створивши об'єкти з допомогою синтаксису String first = new String("string");
. Коли ми створимо об'єкт типу String з використанням іншого синтаксису, наприклад, String first = "string";
, він буде поміщений у пул рядків.
Розглянемо приклад коду:
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))); } }
Тепер ми бачимо, що маємо правильне порівняння.
Зауважте
Використовуйте метод
equals()
замість==
при роботі зString
.
Дякуємо за ваш відгук!