Java对象引用/范围问题

Cli*_*ote 8 java oop scope

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

private Dot[] dots=new Dot[numDots];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Edd*_*die 12

是的,保留了对属性​​的更改.Java是100%传递值,但是,当您传递一个对象时,传递的"值"实际上是指向该对象的指针.因此,当您更改方法中的对象时,您将更改传入的实际对象.

也就是说,如果您有以下方法,那么调用方法将看到更改:

private void updateMyDot(final Dot aDot) {
  aDot.dotColor = new Color(255,255,255);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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