Java 对象传递与修改:为什么方法中修改对象属性外部对象不变?
在 Java 中,对象作为参数传递给方法时,实际上是将对象的引用传递给了方法。这意味着方法中对对象属性的修改会影响到外部对象的属性。
然而,如果在方法中对对象的属性进行重新赋值,即将对象引用指向一个新的对象,那么外部对象的属性不会发生变化。这是因为方法中的引用和外部对象的引用不再指向同一个对象。
例如,考虑以下代码:
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
System.out.println('Before: ' + obj.getValue()); // 输出:Before: 10
updateValue(obj);
System.out.println('After: ' + obj.getValue()); // 输出:After: 10
}
public static void updateValue(MyClass obj) {
obj = new MyClass(); // 在方法中重新赋值
obj.setValue(20);
}
}
class MyClass {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
在上述代码中,updateValue方法中重新为obj赋值,这导致方法中的引用指向了一个新的对象。因此,虽然在方法中修改了对象的属性值为20,但是外部对象的属性值仍然是10。
要想在方法中修改对象的属性对外部对象可见,可以通过方法来修改对象的属性,而不是重新赋值一个新的对象。例如,可以修改updateValue方法如下:
public static void updateValue(MyClass obj) {
obj.setValue(20);
}
这样就可以在方法中修改对象的属性,且外部对象的属性也会相应地改变。
原文地址: https://www.cveoy.top/t/topic/qpGi 著作权归作者所有。请勿转载和采集!