跳到主內容

方法寫入外部物件

在 Java 中,方法参数的传递方式是按值传递,也就是说,方法内部对参数的修改不会影响到原始变量的值。因此,在 Java 中无法直接通过方法回写外部变量。

不过,可以通过一些技巧来实现类似于按引用传递的效果。其中一种方法是将要回写的变量封装成一个对象,并将该对象作为方法的参数传递进去。这样,方法内部对该对象的修改会影响到原始变量的值。

例如,假设有一个要回写的变量 int x,可以将其封装成一个对象 IntHolder,该对象包含一个整数属性 value,并提供一个方法 getValue()setValue(int) 分别用于获取和设置该属性的值。然后,在调用方法时,将一个 IntHolder 对象作为参数传递进去。方法内部就可以通过 IntHolder 对象来修改原始变量的值。

下面是一个示例代码:

public class IntHolder {
    private int value;

    public IntHolder(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

public class Main {
    public static void main(String[] args) {
        IntHolder xHolder = new IntHolder(10);
        System.out.println("Before method call: " + xHolder.getValue());

        // 调用方法,将 xHolder 作为参数传递进去
        modifyIntHolder(xHolder);

        System.out.println("After method call: " + xHolder.getValue());
    }

    public static void modifyIntHolder(IntHolder holder) {
        // 修改 holder 的值,会影响到 xHolder
        holder.setValue(20);
    }
}

在上面的示例代码中,IntHolder 对象 xHolder 的值被初始化为 10,然后被传递给 modifyIntHolder 方法。在方法内部,holder 对象的值被修改为 20。由于 xHolderholder 引用的是同一个对象,因此 xHolder 的值也被修改为 20。最终输出结果为:

Before method call: 10
After method call: 20