Читала подробнее про оператор ==, как он сравнивает типы Int.
"При старте JVM, создается 128 экземпляров Integer для чисел от 0 до 127 включительно. При раcпаковке, если значение в диапазоне от 0 до 127, переменной присваивается сгенерированная при старте JVM ссылка на экземпляр Integer. Если же присваивается значение более 127, то генерируется новый класс и его ссылка присваивается переменной. Операция сравнения сравнивает только ссылки. Получается если число меньше 127, то ссылки ведут на один и тот же экземпляр Integer. Если больше 127, то ссылки ведут на разные экземпляры независимо от их значения."
Вбила код
int i = 10000;
int sum = 10000;
System.out.println(i==sum);
Выдает true, хотя согласно статье, должна быть false.
Кэш расширился для хранения значений Int? Или == переопределен теперь для int и сравнивает по значениям, а не ссылкам?
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
18 декабря 2022, 07:38
сколько создается экземпляров Integer зависит от конкретной JVM и настроек запуска программы, минимальная граница -128, максимальная может настраиваться, детальнее про кеш интеджеров можно почитать:
https://dzone.com/articles/java-integer-cache-why-integervalueof127-integerva
Таким образом по умолчанию это будет создание классов для 256 чисел в диапазоне от -128 до +127:
даст true
Также, этот кеш касается всех целочисленных оберток включая Byte, Short, Long (для того же диапазона значений) и Character (для дипазона 0..127).
0
Anonymous #2583212 Backend Developer в Open Code
17 декабря 2022, 07:03
В начале ты пишешь про сравнение Integer, а тестируешь сама на int.
Integer это класс оболочка над int, а int это примитив.
+1
Marianna
17 декабря 2022, 10:05
Поняла, спасибо!
Оператор == сравнивает ссылки. Но для примитивов (int) оператор == сравнивает значения, а не ссылки. Верно?
+1
Anonymous #2583212 Backend Developer в Open Code
17 декабря 2022, 10:09
Примитивы хранят только значения. Это не объекты.
+1
Marianna
17 декабря 2022, 10:29
Да, точно, благодарствую!
0