Порівняння Integer #відповідь #solution #learnjava #java
#java #learning #challenge #відповідь
Цей фрагмент коду Java демонструє цікавий аспект кешування Java Integer і поведінку оператора == під час порівняння об’єктів Integer.
🧐 Давайте розглянемо кожне з чотирьох порівнянь у методі Stream.of:
👉 iEquals(42, 42):
Це порівняння включає два цілі літерали. У Java цілі літерали в діапазоні від -128 до 127 автоматично поміщаються в кешовані об’єкти Integer, коли вони використовуються як об’єкти. Тому оператор ==, який перевіряє рівність посилань, повертає true, оскільки обидва посилання вказують на той самий об’єкт Integer у кеші.
👉 iEquals(42, Integer.valueOf("42")):
Метод Integer.valueOf(String) спочатку перетворює рядок на int, а потім викликає Integer.valueOf(int). Цей метод використовує кеш Integer для значень від -128 до 127. Оскільки 42 знаходиться в цьому діапазоні, метод повертає посилання на кешований об’єкт Integer, який представляє 42. Як і в першому випадку, обидва операнди є посиланнями до того самого кешованого об’єкта, тому == повертає true.
👉 iEquals(42, Integer.valueOf(42)):
Подібно до попереднього випадку, Integer.valueOf(42) поверне посилання на кешований об’єкт Integer, що представляє 42. Знову ж таки, обидва операнди автоматично розміщуються в одному об’єкті Integer з кешу, у результаті == повертає true.
👉 iEquals(42, new Integer(42)):
Тут поведінка змінюється: new Integer(42) явно створює новий об’єкт Integer зі значенням 42, а не використовує кеш Integer. У результаті оператор == тепер порівнює посилання на кешований об’єкт Integer (з автоупакуванням 42 зліва) з посиланням на щойно створений об’єкт Integer (з правого боку). Оскільки це два різні об’єкти в пам’яті, оператор == повертає false.
🤓 Таким чином, перші три порівняння повертають true, оскільки вони порівнюють посилання на той самий кешований об’єкт Integer. Останнє порівняння повертає false, оскільки воно порівнює посилання на кешований об’єкт Integer із посиланням на щойно створений об’єкт Integer. Це підкреслює важливий момент у Java: оператор == перевіряє, чи два посилання вказують на той самий об’єкт, а не те, чи мають два об’єкти однакові значення. Для порівняння значень замість цього слід використовувати метод equals. 👍
До речі, конструктори Integer (такі як new Integer(int a) та new Integer(String s)) вже deprecated починаючи з 9-ої Java. 😉
#learnJava
👍 Ставте лайк і підпишіться, щоб отримати більше головоломок Java та пригод програмування. Щасливого кодування!
🪙☕ Купіть мені каву - допоможіть зібрати кошти для ЗСУ: https://www.buymeacoffee.com/ytkach
💬 Мій телеграм канал: https://t.me/tkach_channel
Слава Україні! 🇺🇦
Видео Порівняння Integer #відповідь #solution #learnjava #java канала Онлайн уроки по Java
Цей фрагмент коду Java демонструє цікавий аспект кешування Java Integer і поведінку оператора == під час порівняння об’єктів Integer.
🧐 Давайте розглянемо кожне з чотирьох порівнянь у методі Stream.of:
👉 iEquals(42, 42):
Це порівняння включає два цілі літерали. У Java цілі літерали в діапазоні від -128 до 127 автоматично поміщаються в кешовані об’єкти Integer, коли вони використовуються як об’єкти. Тому оператор ==, який перевіряє рівність посилань, повертає true, оскільки обидва посилання вказують на той самий об’єкт Integer у кеші.
👉 iEquals(42, Integer.valueOf("42")):
Метод Integer.valueOf(String) спочатку перетворює рядок на int, а потім викликає Integer.valueOf(int). Цей метод використовує кеш Integer для значень від -128 до 127. Оскільки 42 знаходиться в цьому діапазоні, метод повертає посилання на кешований об’єкт Integer, який представляє 42. Як і в першому випадку, обидва операнди є посиланнями до того самого кешованого об’єкта, тому == повертає true.
👉 iEquals(42, Integer.valueOf(42)):
Подібно до попереднього випадку, Integer.valueOf(42) поверне посилання на кешований об’єкт Integer, що представляє 42. Знову ж таки, обидва операнди автоматично розміщуються в одному об’єкті Integer з кешу, у результаті == повертає true.
👉 iEquals(42, new Integer(42)):
Тут поведінка змінюється: new Integer(42) явно створює новий об’єкт Integer зі значенням 42, а не використовує кеш Integer. У результаті оператор == тепер порівнює посилання на кешований об’єкт Integer (з автоупакуванням 42 зліва) з посиланням на щойно створений об’єкт Integer (з правого боку). Оскільки це два різні об’єкти в пам’яті, оператор == повертає false.
🤓 Таким чином, перші три порівняння повертають true, оскільки вони порівнюють посилання на той самий кешований об’єкт Integer. Останнє порівняння повертає false, оскільки воно порівнює посилання на кешований об’єкт Integer із посиланням на щойно створений об’єкт Integer. Це підкреслює важливий момент у Java: оператор == перевіряє, чи два посилання вказують на той самий об’єкт, а не те, чи мають два об’єкти однакові значення. Для порівняння значень замість цього слід використовувати метод equals. 👍
До речі, конструктори Integer (такі як new Integer(int a) та new Integer(String s)) вже deprecated починаючи з 9-ої Java. 😉
#learnJava
👍 Ставте лайк і підпишіться, щоб отримати більше головоломок Java та пригод програмування. Щасливого кодування!
🪙☕ Купіть мені каву - допоможіть зібрати кошти для ЗСУ: https://www.buymeacoffee.com/ytkach
💬 Мій телеграм канал: https://t.me/tkach_channel
Слава Україні! 🇺🇦
Видео Порівняння Integer #відповідь #solution #learnjava #java канала Онлайн уроки по Java
Показать
Комментарии отсутствуют
Информация о видео
Другие видео канала
Docker - Подготовка микросервиса к проду - Анонс стрима- Java и технологиииТППС. Лекция 13. JPA. ТранзакцииAnt - Занятие 9 - Java практикаТППС. Лекция 8. Слой интеграцииТППС. Лекция 11. JPA. Состояния и запросыАОП - Лекция 7 - ТППСВнедрение через property - 7 - The Basics of Spring FrameworkБольше возможностей контекста - 8 - The Basics of Spring FrameworkВозможности контекста - 6 - The Basics of Spring FrameworkТППС. Лекция 5. Слой сервисовСервис запуска потоков - Concurrency #3 - Advanced JavaУрок 11 - Annotations, I/O, Properties - Java для тестировщиковУрок 7 - Enum, Number, String - Java для тестировщиковПростой доступ к БД - 13 - The Basics of Spring FrameworkИменование бинов и старт контекста - 3 - The Basics of Spring FrameworkРекурсивное расширение типа - Generics #3 - Advanced JavaБлокирующая очередь - Collections #5 - Advanced JavaНаследование и расширители обобщений - Generics #2 - Advanced JavaСинхронизаторы - Concurrency #4 - Advanced JavaПростые аспекты - 12 - The Basics of Spring FrameworkИспользование Reflection API - Annotations/Reflection #2 - Advanced Java