gpt4 book ai didi

java - 数组初始化: int versus other Objects

转载 作者:行者123 更新时间:2023-12-02 06:42:43 25 4
gpt4 key购买 nike

我对是否需要进行数组初始化感到困惑...

对于此代码:

private int[][][] rPos = new int[SIZE][SIZE][2];

我可以开始以正确的方式使用数组吗,如下面的行?

getLocationOnScreen(rPos[i][j]); // pass an array of two integers

并且,对于此代码:

View[][] allViews = new View[SIZE][SIZE];

然后我必须创建另一个嵌套循环,并通过调用其构造函数来初始化每个 View,如下所示:

for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
allViews[i][j] = new View(ctor1, ctor2);
}
}

我的问题是,为什么我不需要对整数数组执行此操作?另外,当我输入 View[][] allViews = new View[SIZE][SIZE]; 时,我的“new”关键字做了什么?

最佳答案

why didn't I need to do this for an integer array?

每当您创建数组时,都会为数组元素分配该数组组件类型的默认值。对于 int,默认值为 0,因此对于 int[],所有元素都将初始化为 0 默认情况下。

但是,对于引用类型,默认值为null。因此,这些数组的问题是,当您尝试访问这些数组元素中的某些属性或方法时,可能会出现潜在的 NullPointerException 异常。基本上,对于引用数组,我们的意思是数组元素只不过是对实际对象的引用。最初它们不指向任何对象。

因此,要访问任何属性或方法,您必须将每个数组元素初始化为某个实例,以避免NPE

what did my "new" keyword do, when I typed View[][] allViews = new View[SIZE][SIZE];?

它创建了一个 View 类型的数组。尺寸为SIZE x SIZE。但由于 View 不是原始类型,而是引用类型。如前所述,这些值默认为 null

getLocationOnScreen(rPos[i][j]); // pass an array of two integers

当然,您传递了一个包含 2 个整数的数组。 rPos[i][j] 的组件类型是 int[]。默认值也是null。但在这种情况下,它不会是 null,因为您也给出了所有内部数组的维度。

如果将数组声明更改为:

private int[][][] rPos = new int[SIZE][SIZE][];  // Missing last dimension

那么rPos[i][j]的值为null

关于java - 数组初始化: int versus other Objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986772/

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