Различие основных понятий
1. Integer — это класс-оболочка для int, который является базовым типом данных в java.
2. Целочисленные переменные должны быть созданы до того, как их можно будет использовать, в то время как целые переменные не должны быть
3. Integer на самом деле является ссылкой на объект, когда создается новый Integer, фактически генерируется указатель, указывающий на объект, в то время как int напрямую хранит значения данных
4. Значение по умолчанию для Integer равно null, а значение по умолчанию для int равно 0.
Сравнение Integer, new Integer() и int
1. Сравнение двух новых переменных Integer() всегда ложно
Поскольку new генерирует два объекта с разными адресами памяти
2. Сравните переменную Integer с новой переменной Integer(), которая всегда ложна.
Поскольку переменная Integer указывает на объект в пуле констант Java, а переменная new Integer() указывает на вновь созданный объект в куче, их адреса в памяти различаются.
3. Сравните две целочисленные переменные.Если значения двух переменных находятся между -128 и 127, результат сравнения истинен.Если значения двух переменных не находятся в этом интервале, результат сравнения ложен.
анализировать:
Integer i = 100 преобразуется в Integer i = Integer.valueOf(100) во время компиляции, и java определяет valueOf типа Integer следующим образом:
Java кэширует числа от -128 до 127.
Так что когда Integer i = 127, 127 будет закэшировано, а в следующий раз, когда вы запишете Integer j = 127, оно будет взято прямо из кеша, и новых не будет.
4. Когда переменная int сравнивается с Integer и new Integer(), пока два значения равны, это правда
Потому что когда класс-оболочка Integer сравнивается с базовым типом данных int, java автоматически распаковывает его как int, а затем сравнивает, что фактически становится сравнением двух переменных int.
Пример 1:
ответ
Пример 2:
Пример 3:
Следующий вывод дает false:
Разобрать:
я01 == я02 . i01.intValue()i02 Сравнение двух значений 5959 -->true;
я01 == я03 . Поскольку 59 находится между -128 и 127, присваивания i01 и i03 возвращают один и тот же объект. Оба являются одним и тем же объектом, возвращенным из chche, и адрес объекта один и тот же;
i03 == i04. i03 — это значение из кеша, i04 — это новый новый объект, это два разных объекта, поэтому false.
i02 == i04. Аналогично первому, правда.
Ответ С.
Пример 4:
Единственное отличие от примера 3 — изменить все значения на 128.
Следующий вывод дает false:
Отвечать: