如果我有一个二维数组的对象,并想要将它们全部初始化,我会调用一个循环,例如:
for(int i=0; i<len; i++)
for(int j=0; j<len; j++)
objects[i][j] = new MyObject();
哪个工作正常,但当我尝试使用for-each结构时,它不起作用,整个数组保持为空:
for(MyObject[] intermediate: objects)
for(MyObject obj: intermediate)
obj = new MyObject();
他们为什么表现不同?
答案 0 :(得分:4)
分配
obj = new MyObject();
只需在变量obj
中设置一个新对象,并且不会更改数组中的值,它只会更改引用变量obj
。
如果objects[i][j]
被obj
限制,然后您更改obj
的值,而不更改实际数组,则会发生什么。
直接分配到objects[i][j]
时 - 它按预期工作,因为您更改了objects[i][j]
的值,这正是您想要做的。
答案 1 :(得分:3)
引用按值传递,因此obj = new MyObject();
仅更新您对objects[i][j]
的引用的本地副本。
答案 2 :(得分:1)
它只适用于外部循环,因为有新的引用,但不是深层引用:
public static void main (String[] args ) {
Integer [][] iaa = new Integer[3][4];
for (Integer[] ia : iaa) {
for (int i = 0; i < ia.length; ++i) {
ia[i] = i;
}
}
}