Поскольку int
является примитивным типом, а Integer
- его классом-оболочкой.
Иначе говоря, int
- это тип значения (и поэтому не может быть null
), в то время как Integer
является ссылочным типом (и поэтому может быть null
).
В Java каждый тип примитива (например, boolean
, double
или char
) является типом значения.Поскольку примитивные типы не наследуются от Object
, предлагается набор «классов-оболочек» (Boolean
, Double
, Character
и многие другие), когда такое поведение необходимо (например, помещая ихв контейнерах или используя их в качестве параметров универсального типа).
В результате примитивные типы действительно являются гражданами второго сорта в Java.