Загрузка страницы

Порівняння 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
Показать
Комментарии отсутствуют
Введите заголовок:

Введите адрес ссылки:

Введите адрес видео с YouTube:

Зарегистрируйтесь или войдите с
Информация о видео
21 января 2024 г. 12:00:25
00:00:58
Другие видео канала
Docker - Подготовка микросервиса к проду - Анонс стрима- Java и технологиииDocker - Подготовка микросервиса к проду - Анонс стрима- Java и технологиииТППС. Лекция 13. JPA. ТранзакцииТППС. Лекция 13. JPA. ТранзакцииAnt - Занятие 9 - Java практикаAnt - Занятие 9 - Java практикаТППС. Лекция 8. Слой интеграцииТППС. Лекция 8. Слой интеграцииТППС. Лекция 11. JPA. Состояния и запросыТППС. Лекция 11. JPA. Состояния и запросыАОП - Лекция 7 - ТППСАОП - Лекция 7 - ТППСВнедрение через property - 7 - The Basics of Spring FrameworkВнедрение через property - 7 - The Basics of Spring FrameworkБольше возможностей контекста - 8 - The Basics of Spring FrameworkБольше возможностей контекста - 8 - The Basics of Spring FrameworkВозможности контекста - 6 - The Basics of Spring FrameworkВозможности контекста - 6 - The Basics of Spring FrameworkТППС. Лекция 5. Слой сервисовТППС. Лекция 5. Слой сервисовСервис запуска потоков - Concurrency #3 - Advanced JavaСервис запуска потоков - Concurrency #3 - Advanced JavaУрок 11 - Annotations, I/O, Properties - Java для тестировщиковУрок 11 - Annotations, I/O, Properties - Java для тестировщиковУрок 7 - Enum, Number, String - Java для тестировщиковУрок 7 - Enum, Number, String - Java для тестировщиковПростой доступ к БД - 13 - The Basics of Spring FrameworkПростой доступ к БД - 13 - The Basics of Spring FrameworkИменование бинов и старт контекста - 3 - The Basics of Spring FrameworkИменование бинов и старт контекста - 3 - The Basics of Spring FrameworkРекурсивное расширение типа - Generics #3 - Advanced JavaРекурсивное расширение типа - Generics #3 - Advanced JavaБлокирующая очередь - Collections #5 - Advanced JavaБлокирующая очередь - Collections #5 - Advanced JavaНаследование и расширители обобщений - Generics #2 - Advanced JavaНаследование и расширители обобщений - Generics #2 - Advanced JavaСинхронизаторы - Concurrency #4 - Advanced JavaСинхронизаторы - Concurrency #4 - Advanced JavaПростые аспекты - 12 - The Basics of Spring FrameworkПростые аспекты - 12 - The Basics of Spring FrameworkИспользование Reflection API - Annotations/Reflection #2 - Advanced JavaИспользование Reflection API - Annotations/Reflection #2 - Advanced Java
Яндекс.Метрика