gpt4 book ai didi

java - 具有元素 null 的 java 数组的长度是否为 1?

转载 作者:行者123 更新时间:2023-11-29 10:11:45 24 4
gpt4 key购买 nike

代码如下:

int[][][] aT = { {{9, 4}, null},  {null},  {{1, 2, 3}} };
System.out.println(aT.length + " " + aT[1].length); // 3 1

aT[1].length 显示为 1

是不是只有当aT指向的对象的第二个索引处有int[][]类型的元素时才会计算长度?如果是,为什么 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

最佳答案

是的。

事实上,当你声明和初始化一个对象引用数组时,它里面的所有值默认都是null。请记住,数组的长度永远不会改变,尽管数组中有内容(null 元素)。 lengthsize是有区别的,长度是一个数组可以存储多少个元素,而size是有效的数量数组中的元素。此外,数组不是列表。

例子:

String[] stringArray = { null, null };
System.out.println(stringArray.length);
stringArray[0] = "hello";
stringArray[1] = "world";
System.out.println(stringArray.length);

打印:

2
2

来自 JLS (强调我的):

An array object contains a number of variables. The number of variables may be zero, in which case the array is said to be empty. (...) If an array has n components, we say n is the length of the array; the components of the array are referenced using integer indices from 0 to n - 1, inclusive

(...)

Once an array object is created, its length never changes.

(...)

An array is created by an array creation expression (§15.10.1) or an array initializer (§10.6)

An array creation expression specifies the element type, the number of levels of nested arrays, and the length of the array for at least one of the levels of nesting. The array's length is available as a final instance variable length.

An array initializer creates an array and provides initial values for all its components.

(...)

The length of the array to be constructed is equal to the number of variable initializers immediately enclosed by the braces of the array initializer. Space is allocated for a new array of that length. If there is insufficient space to allocate the array, evaluation of the array initializer completes abruptly by throwing an OutOfMemoryError. Otherwise, a one-dimensional array is created of the specified length, and each component of the array is initialized to its default value.

(...)

  • The public final field length, which contains the number of components of the array. length may be positive or zero.

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

  • 当你初始化一个数组时,你必须至少定义第一层的长度(也就是维度)。如果你有一个单层数组,那么这个长度就是整个数组的长度。
  • 初始化数组时,其所有组件(也称为元素)都使用该类型的默认值进行初始化。对于原始类型,它可能是 0false(取决于类型)。对于对象引用,它是 null
  • 数组的长度表示可以有多少个元素。
  • 数组的长度是固定的。此长度无法更改。

同样,数组的长度(可以存储多少个组件)不同于数组的大小(目前存储了多少个我们认为合适的值的组件)。

关于java - 具有元素 null 的 java 数组的长度是否为 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31410673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com