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);
}
}
假设我有这样的代码;
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);
}
}