Вопрос: Расхождение в поведении пула целочисленных констант Java на 127
Введение:
Пул целочисленных констант — это механизм в Java, который оптимизирует кэширование общих целочисленных значений для повышения производительности. Однако поведение этого пула меняется на уровне 127, что вызывает путаницу среди разработчиков.
Понимание поведения:
Для целых чисел от -128 до 127 , Java гарантирует идентичные ссылки для переменных, ссылающихся на одну и ту же константу.
Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2); // True
Это потому, что эти значения кэшируются в пуле констант.
Расхождение на 128:
Однако, когда целочисленное значение превышает 127, поведение меняется.
Integer i1 = 128; Integer i2 = 128; System.out.println(i1 == i2); // False
Это связано с оптимизацией реализации. Хотя JLS гарантирует кэширование значений до 127, за пределами этого диапазона реализации могут выбрать кэширование значений по-другому или даже не кэшировать вообще.
Дополнительные соображения:
Даже В пределах гарантированного диапазона (от -128 до 127) поведение кэширования не всегда надежно. Например, с помощью new Integer() можно обойти пул констант и создать новые ссылки.
Integer i1 = new Integer(127); Integer i2 = new Integer(127); System.out.println(i1 == i2); // False
Вывод:
Поведение пула целочисленных констант по адресу 127 обусловлено оптимизацией реализации и гарантированным диапазоном, определенным JLS. Разработчикам следует знать об этом изменении в поведении, чтобы избежать неожиданных результатов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3