在 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);
}

这样就可以在方法中修改对象的属性,且外部对象的属性也会相应地改变。

Java 对象传递与修改:为什么方法中修改对象属性外部对象不变?

原文地址: https://www.cveoy.top/t/topic/qpGi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录