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