Java - 参数和增强的 For 循环复制问题

Java - Parameter and Enhanced For Loop copy issue

假设我有这样的代码;

public void insert(Student[] stus)
{
    int count = 0;
    for(Student s: stus)
    {
    s.setId( bla bla);
    stus[count].setId(bla bla) // is this line needed?
    count++;
    }
}

因此,如果我从增强的 for 循环中更改 s 上的任何内容,我是否也可以看到 stus 数组中的更改?增强的 for 循环复制如何在参数或其他方面起作用?

增强的 for 循环不会创建您正在迭代的集合或数组元素的副本,因此 s.setId()stus[count].setId() 会更新相同的 Student实例.

不需要

stus[count].setId(bla bla),因为 s.setId(bla bla) 也一样。

是 - s 只是一个包含从 stus 复制的值的变量。该值是对对象的引用 - 通过 s 所做的更改仍将在 stus 中可见。仅复制了 reference。所以你的循环可以是:

for (Student s : stus) {
    s.setId(...);
}

根本不需要 count,除非它是 ID 计算的一部分。如果它 该计算的一部分,我将只使用常规的 for 循环:

for (int i = 0; i < stus.length; i++) {
    s.setId(/* some expression involving i */);
}

stus 是对数组对象的 引用 ,这意味着您在 insert 内对其执行的任何更改都会影响实际参数(变量你曾经调用 insert) 以及它的元素的变化。

另一方面,您不需要 count,因为 s 已经是对迭代元素的引用:

public void insert(Student[] stus)
{
    for(Student s: stus)
    {
        s.setId( bla bla);
    }
}