代码如下:
int[][][] aT = { {{9, 4}, null}, {null}, {{1, 2, 3}} };
System.out.println(aT.length + " " + aT[1].length); // 3 1
将aT[1].length
显示为1
。
不是这样,只有在int[][]
指向的对象的第二个索引处有aT
类型的元素时才会计算长度吗?如果是,为什么aT[1]
null
长度为1?因为null
不属于int[][]
类似的例子:
MyType[] t = {null};
System.out.println(t.length); //1
对我来说,t.length
应该是1
,只有当数组中包含{new MyType()}
之类的元素或者元素是MyType
的子类型的实例时,
MyType[] t = {new MyType()};
System.out.println(t.length); //1
答案 0 :(得分:5)
是强>
实际上,当您声明并初始化对象引用数组时,默认情况下其中的所有值都将为null
。请记住,尽管数组中的内容(null
元素),数组的长度永远不会变化。 长度与尺寸之间存在差异,长度是数组中可存储的元素数量,而大小是有效的数量数组中的元素。此外,数组不是列表。
示例:
String[] stringArray = { null, null };
System.out.println(stringArray.length);
stringArray[0] = "hello";
stringArray[1] = "world";
System.out.println(stringArray.length);
打印:
2
2
来自JLS(强调我的):
数组对象包含许多变量。变量的数量可以为零,在这种情况下,数组被称为空 。 (...)如果一个数组有n个分量,我们说n是数组的长度;使用0到n-1之间的整数索引引用数组的组件,包括
(...)
创建数组对象后,其长度永远不会改变。
(...)
数组由数组创建表达式(第15.10.1节)或数组初始值设定项(第10.6节)
创建数组创建表达式指定至少一个嵌套级别的元素类型,嵌套数组的级别数和数组的长度。 数组的长度可用作最终实例变量长度。
数组初始值设定项创建一个数组并为其所有组件提供初始值。
(...)
要构造的数组的长度等于由数组初始值设定项的大括号直接包围的变量初始值设定项的数量。为该长度的新数组分配空间。如果没有足够的空间来分配数组,则通过抛出OutOfMemoryError突然完成对数组初始化程序的评估。否则,创建一个指定长度的一维数组,并将数组的每个组件初始化为其默认值。
(...)
- 公共最终字段
length
,包含数组的组件数。length
可能是正数或零。
从这里,您可以了解以下内容:
0
或false
(取决于类型)。对于对象引用,它是null
。同样,数组的长度(可存储的组件数量)与数组的大小不同<(>(我们认为当前存储的组件数量是多少)。
答案 1 :(得分:3)
是的,null可以被认为是数组类型的对象。 Null可以是字符串,Date,JFrame,您想要的任何内容。