Подтвердить что ты не робот

Нуль для примитивных типов данных

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

  • byte: java.lang.Byte
  • short: java.lang.Short
  • int: java.lang.Integer
  • long: java.lang.Long
  • float: java.lang.Float
  • double: java.lang.Double
  • boolean: java.lang.Boolean
  • char java.lang.Character

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Объекты содержат больше накладных расходов, чем примитивы. Следующий тест показывает, что 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 реализовал примитивы с нулевым значением, к сожалению, java не имеет примитивов с нулевым значением.

Ответ 7

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

Ответ 8

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

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

Итак, по умолчанию мы имеем

   int a=0;

а не

   int a=null;

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

Ответ 9

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

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

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

EX:

Тестирование t1

Тестирование t2

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

Целое число i

Длинные l

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