О примитивах и ссылочных типах
int
- это примитивный тип, который отличается от ссылочного типа. Только ссылочные типы могут иметь значение null
.
Ссылки
Похожие вопросы
Вкл. Integer
против int
java.lang.Integer
фактически является ссылочным типом, обозначенным типом «ящика» для примитивного типа int
. Таким образом, переменная Integer
может иметь значение null
.
С введением autoboxing в Java, преобразования от int
до Integer
и наоборот могут выполняться неявно. Но имейте в виду, что они очень разных типов, и на самом деле попытка распаковать null
приведет к NullPointerException
.
Ссылки
Похожие вопросы
О последствиях Integer
, являющихся ссылочным типом
Одно из последствий уже упоминалось: переменная Integer
может иметь значение null
. Еще один из них заключается в том, что оператор ==
для двух Integer
является сравнением опорных идентификаторов, а не числовым равенством.
System.out.println(new Integer(0) == new Integer(0)); // prints "false"
По возможности, вы должны предпочитать примитивные типы коробочным типам. Вот цитата из Effective Java 2nd Edition, Item 49: Предпочитаю примитивные типы коробочным примитивам (выделено автором):
В итоге, используйте примитивы вместо коробочных примитивов, когда у вас есть выбор. Примитивные типы проще и быстрее. Если вы должны использовать коробочные примитивы, будьте осторожны! Автобокс уменьшает многословность, но не опасность использования штучных примитивов . Когда ваша программа сравнивает два коробочных примитива с оператором ==
, она выполняет сравнение идентификаторов, что почти наверняка не , что вы хотите. Когда ваша программа выполняет вычисления смешанного типа с использованием упакованных и распакованных примитивов, она выполняет распаковку и , когда ваша программа выполняет распаковку, она может выдать NullPointerException
. Наконец, когда ваша программа упаковывает примитивные значения, это может привести к дорогостоящим и ненужным созданиям объектов.
Похожие вопросы
Когда необходимо использовать Integer
Существует одно явное исключение, когда Integer
должен использоваться вместо int
: универсальные шаблоны. Параметры типа в обобщенных Java-кодах должны быть ссылочными типами. Таким образом, вы не можете иметь List<int>
в Java; вместо этого вы должны использовать List<Integer>
.
Похожие вопросы
Смотри также
Об использовании соответствующей структуры данных
Если вы должны иметь int[]
, который допускает значения null
, тогда быстрый ответ - использовать Integer[]
. Поскольку теперь у вас есть массив ссылочных типов, некоторые элементы могут быть null
. Знайте обо всех последствиях работы со ссылочными типами, иначе вы можете столкнуться с неожиданностями.
Однако на этом этапе я бы серьезно подумал об использовании List<Integer>
(см. Effective Java 2nd Edition: предпочитайте списки массивам ). Списки гораздо более функциональны, чем массивы, и они хорошо взаимодействуют с более крупной платформой Java Collections Framework.
API ссылки