Почему примитивные типы данных не могут быть "нулевыми" в 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 не Object
s. Вы всегда можете использовать один из классов-оболочек, чтобы иметь 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"