public static void main(String[] args) {
Integer stupidNum1 = 127;
Integer stupidNum2 = 127;
Integer stupidNum3 = Integer.parseInt("127");
Integer stupidNum4 = 128;
Integer stupidNum5 = 128;
Integer stupidNum6 = -129;
Integer stupidNum7 = -129;
System.out.println(stupidNum1 == stupidNum2);
System.out.println(stupidNum1 == stupidNum3);
System.out.println(stupidNum4 == stupidNum5);
System.out.println(stupidNum6 == stupidNum7);
}Что будет выведено на экран при сравнении этих чисел?
Результат:
true
true
false
false
Объяснение:
В джаве значения в диапазоне от -128 до 127 включительно хранятся в Integer кэше.
Если инициализируется переменная со значением в указанном диапазоне, объект из кэша будет использован повторно => одна и та же ссылка на один и тот же объект.
Если значение не входит в диапазон, создаётся новый объект в куче, и при проверке на равенство через "==" сравниваться будут ссылки на разные объекты.
При создании значения через parseInt(): возвращается примитив int -> автоупаковка в Integer -> генерация вызова valueOf(), который проверяет, находится ли значение в диапазоне кэша, и либо возвращает кэшированный объект, либо создаёт новый объект типа Integer.
В общем, помните об этом, но сравнивайте числа через equals(), чтобы не заморачиваться.
@codeof_art