带有null元素的java数组的长度是1吗?

时间:2015-07-14 15:17:59

标签: java arrays

代码如下:

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

2 个答案:

答案 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可能是正数或零。
  •   

从这里,您可以了解以下内容:

  • 初始化数组时,必须至少定义第一级的长度(a.k.a。维度)。如果你有一个单一级别的数组,那么这个长度将是整个数组的长度。
  • 初始化数组时,将使用类型的默认值初始化其所有组件(a.k.a.元素)。对于原始类型,它可以是0false(取决于类型)。对于对象引用,它是null
  • 数组的长度表示可以有多少组件。
  • 数组具有固定长度。此长度无法更改。

同样,数组的长度(可存储的组件数量)与数组的大小不同<(>(我们认为当前存储的组件数量是多少)。

答案 1 :(得分:3)

是的,null可以被认为是数组类型的对象。 Null可以是字符串,Date,JFrame,您想要的任何内容。