gpt4 book ai didi

java - 为什么可以使用增强的 for 循环更改字段变量但不能初始化对象?

转载 作者:行者123 更新时间:2023-11-29 05:19:55 25 4
gpt4 key购买 nike

我最近了解到,您不能在 Java 中使用增强的 for 循环来初始化对象,因为增强的 for 循环的工作方式是从对象创建“虚拟”对象,然后使用虚拟对象执行代码声明的任何内容

但这促使我尝试使用增强的 for 循环更改对象内部的字段变量,令人惊讶的是,代码更改了对象中的字段变量。任何人都可以向我解释这是如何工作的,因为据我所知,对象不应发生任何变化,原因与您不能使用增强的 for 循环初始化对象的原因相同。很明显,我在这里的理解上存在差距,所以任何人都可以帮助我

最佳答案

在 Java 中,您看到的对象不是对象,而是对象引用
对象引用只是对 RAM 中对象的引用。例如。

Person p1;
Person p2;
p1 = new Person(); // p1 now has an reference to an Person object
p2 = p1; // Now p2 and p1 point to the same object

现在,如果我们对 p2 的对象进行更改,该更改将反射(reflect)到 p1 的对象,因为它们引用相同的对象。

例如。

p2.setHeight(50);
p1.setHeight(90);
System.out.println(p2.getHeight());

上面的代码片段会打印出 90,而不是 50。因为首先将对象的高度设置为 50,然后将对象的高度设置为 90(使用其他对象引用)。​​

回到你的问题。

for(Person p : peopleArray)
{
// more code
}

在 for 循环的每个循环中,都会创建一个对象引用 p 并引用 peopleArray 中的对象引用所引用的同一对象。

关于java - 为什么可以使用增强的 for 循环更改字段变量但不能初始化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com