2013-09-24 34 views
0

我对我是否需要做数组初始化迷茫......阵列初始化:诠释与其他对象

对于此代码:

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

​​

我的问题是,为什么我不需要为整数数组做这件事?此外,当我输入View[][] allViews = new View[SIZE][SIZE];时,我的“新”关键字做了什么?

+0

对于基元,初始值为'0','0.0'或'false'。对于引用类型,它是'null'。这就是为什么你不需要为一个整数数组(一维)做到这一点。但是,您仍然需要初始化维度。 –

+0

@Sotirios哦,是的,我现在记得!但是在第二行中,我没有传入“两个整数的数组”,因此这是一个参考,而不是一个原始类型? – user1032613

+0

是的,你有。如果该数组尚未初始化,您将得到一个'NullPointerException'尝试对其进行解引用。 –

回答

2

为什么我不需要为整数数组做这个?

无论何时创建数组,数组元素都会被指定为该数组的组件类型的默认值。对于int,默认值为0,因此对于int[],所有元素默认初始化为0

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

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

当我输入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

+0

谢谢!还有一个问题:'我可以开始正确使用阵列,就像下面这行?' – user1032613

+1

@ user1032613。是的,你可以在这种情况下使用它。你已经给出了所有的维度。所以内部数组也被初始化。 –