如果int数组的各个元素未初始化,它们默认存储什么?我发现好像有类似于空数组或null数组的东西。它们之间有什么区别,哪一个适用于我的第一个问题?
严格来讲,空数组并不存在;但由于数组属于对象,数组类型是引用类型(也就是说:数组变量只保存对数组的引用),这意味着一个数组变量可以为null
而不是实际指向数组:
int[] notAnArray = null;
一个空数组是长度为零的数组,它没有任何元素:
int[] emptyArray = new int[0];
(并且永远不可能具有元素,因为创建后数组的长度永远不会更改)。
当您创建一个非空数组而没有为其元素指定值时,它们将默认为类似于零的值-对于整数数组为0
,对于对象类型的数组为null
等等;所以,这个:
int[] arrayOfThreeZeroes = new int[3];
与此相同:
int[] arrayOfThreeZeroes = { 0, 0, 0 };
尽管这些值在之后可以重新分配;数组的长度不能更改,但是它的元素可以更改。
数组成员的初始化值为它们的默认值。对于 int
来说, 默认值是0。 对于 Object
来说,则是 null
。 在Java中,一个 null
数组是一个 null
数组引用 (因为数组是Java中的引用类型)。
对于
int
类型,默认值为零,即 0。
以及
对于所有引用类型(§4.3),默认值为
null
。
Integer[]
,但是 double[]
会默认为0(作为原始类型)。 - Elliott Frischint[] a = new int[0]
中的索引0与默认值无关。 - Thomas Wellerint[] a = new int[1];
在索引0
处有一个默认值。实际上,任何长度大于0
的数组在索引0
处都有一个默认值。 - Elliott Frisch默认情况下,Java根据声明的类型初始化数组。如果是int类型,则初始化为0。如果是对象类型,如对象数组,则初始化为null。
0
空数组是指具有0个元素的数组
我还没听说过null
数组,但它很可能是一个具有非零元素引用的数组,这些引用都是null