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