2

如果我有一个二维对象数组,并且想要全部初始化它们,我会调用一个循环,例如:

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();

他们的行为怎么不一样?

4

3 回答 3

4

作业

obj = new MyObject();

只需在变量中设置一个新对象obj,并不会更改数组中的值,它只会更改引用变量obj

发生的情况是 , objects[i][j]然后obj您更改 的值obj,而不更改实际数组。

当您直接分配时objects[i][j]- 它按预期工作,因为您更改了 的值objects[i][j],这正是您想要做的。

于 2012-04-28T10:05:36.020 回答
3

引用是按值传递的,因此obj = new MyObject();只更新您对 . 的引用的本地副本objects[i][j]

于 2012-04-28T10:05:22.677 回答
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; 
        }
    }
}
于 2012-04-28T10:31:33.027 回答