gpt4 book ai didi

Java 对象引用/范围问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:03 24 4
gpt4 key购买 nike

如果我有这样的成员变量(在类的主体中声明)

private Dot[] dots=new Dot[numDots];

我遍历这个数组的所有成员,并且:

1) 将每个 Dot 对象传递给另一个类的函数,该函数:

2) 如果满足某些条件,将它传递给第三类的另一个函数

3) 第三类改变了点对象的一些属性

那么当这个对象返回给原始/父类时,那些对其属性的更改是否已经保留?或者它会被第二个/第三个函数视为局部变量吗?

最佳答案

是的,对属性的更改被保留。 Java 是 100% 按值传递的,但是,当您传递一个对象时,传递的“值”实际上是指向该对象的指针。因此,当您更改方法中的对象时,您正在更改传入的实际对象。

也就是说,如果你有下面的方法,那么调用方法会看到变化:

private void updateMyDot(final Dot aDot) {
aDot.dotColor = new Color(255,255,255);
}

但如果您执行以下操作,则调用方法不会看到更改。

private void updateMyDot(/* not final */ Dot aDot) {
aDot = new Dot();
aDot.dotColor = new Color(255,255,255);
}

在第二个示例中,调用者不会看到任何更改,也不会看到新创建的Dot 对象。

关于Java 对象引用/范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/622944/

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