Почему примитивные типы данных не могут быть "нулевыми" в Java?

при объявлении любых данных примитивного типа, таких как int или double они инициализируются в 0 или 0.0. Почему мы не можем установить их в null?

9 ответов


примитивный тип данных. С другой стороны, то, что мы называем объектами, - это просто указатели на то, где хранятся данные. Например:

Integer object = new Integer(3);
int number = 3;

в этом случае object - это просто указатель на целочисленный объект, значение которого равно 3. То есть в позиции памяти, где хранится объект переменной, все, что у вас есть, - это ссылка на то, где действительно находятся данные. Положение памяти, где number хранится, с другой стороны, содержит значение 3 непосредственно.

таким образом, вы можете установить object null, но это просто означает, что данные этого объекта в null (т. е. не назначено). Вы не можете установить int в null, потому что язык интерпретирует это как значение 0.

надеюсь, что это поможет!


потому что null является ссылкой. И примитивные типы не являются ссылочными типами. Только объекты являются ссылочными типами.


потому что примитивные типы данных в Java не Objects. Вы всегда можете использовать один из классов-оболочек, чтобы иметь Object. Каждый из восьми примитивных типов данных имеет соответствующую оболочку:

  • байт: java.lang.Byte
  • коротко: java.lang.Short
  • int:java.lang.Integer
  • долгих: java.lang.Long
  • поплавок: java.lang.Float
  • дважды: java.lang.Double
  • boolean:java.lang.Boolean
  • char java.lang.Character

если вас интересует вся структура, вы можете начать здесь (примитивные типы данных).


потому что это то, что говорит языковой стандарт.

Если вы хотите, чтобы иметь возможность пройти null, вы должны использовать типы обертки, например,Integer вместо int.


потому что это примитивный тип, а не объект. Вы можете использовать соответствующий объект для каждого типа, Если вам нужна возможность использовать нулевые значения(например, Double для double, Long для long, Boolean для boolean и т. д.)


объекты включают больше накладных расходов, чем примитивы. Следующий тест показывает, что int работает примерно в 10 раз быстрее Integer.

int n;
EtmPoint point1 = etmMonitor.createPoint("test:objects");
for (n = 0; n < 1000000; n++) {
    Integer t = 0;
    t = 10;
    t = 11;
}

point1.collect();
EtmPoint point = etmMonitor.createPoint("test:primitives");
for (n = 0; n < 1000000; n++) {
    int t = 0;
    t = 10;
    t = 11;
}
point.collect();

etmMonitor.render(new SimpleTextRenderer());

вот почему .net реализовал nullable primitives, к сожалению, java не имеет nullable primitives.


язык программирования Java является статически типизированным, что означает, что все переменные сначала должны быть объявлены прежде, чем они могут быть использованы. Это включает в себя указание типа и имени переменной.


наряду со всем выше ответом я хотел бы добавить этот момент тоже.

для примитивных типов мы установили размер памяти i.e для int у нас есть 4 байта, а char-2 байта. И null используется только для объектов, потому что размер памяти не фиксирован.

Так по умолчанию у нас есть,

   int a=0;

, а не

   int a=null;

то же самое с другими примитивными типами и, следовательно, null используется только для объектов, а не для примитивных типов.


прежде всего, разница примитива и ссылки на объект-это примитивная переменная, хранящая фактические значения, тогда как переменная ссылки на объект хранит адрес объекта, на который они ссылаются, в этом случае в ссылке на объект, если нет адреса, он перейдет к "null".

значения по умолчанию примитивного типа данных зависят от примитивного типа данных: like byte = 0, short = 0, int = 0, long = 0L, float = 0.0 f, double = 0.0 d, boolean = false, char = "\u0000".

когда мы объявляем переменную любого типа класса, она называется ссылочным типом данных.

EX:

тест t1

тест t2

(Типы Оберток Объектов)

целое число i

длинный l

ссылка на объект значения по умолчанию, JVM инициализирует ссылочную переменную как "null", а также инициализирует массив"null"