我可以改变 Java 中的参数吗?

Can I mutate argument in Java?

在 C++ 中,我可能会这样做:

sometype var = somevalue;
mutate(var);
// var is now someothervalue

void mutate(sometype &a) {
    a = someothervalue;
}

Java中是否有等效的东西?

我正在努力完成类似的事情:

Customer a;

public static void main(String[] args) {
    a = newCustomer("Charles");
    Customer b = null;
    mutate(b);
    System.out.println(b.getName()); // NullPointerException, expected "Charles"
}

void mutate(Customer c) {
    c = a;
}

如果 Customer 是可变的,为什么会产生 NullPointerException?

看来您对可变性感到困惑。可变性只是改变对象状态。您在示例中展示的不仅仅是可变性。您通过将实例引用到其他实例 (=) 来完全更改实例。

sometype var = somevalue;
mutate(var);

void mutate(sometype a) {
    a = someothervalue; // changing a to someothervalue.
}

什么是可变性

sometype var = somevalue;
mutate(var);
var.getChangeState() // just gives you the latest value you done in mutate method

    void mutate(sometype a) {
        varType someParamForA= valueX;
        a.changeState(someParamForA); // changing a param inside object a.
    }

是的,如果可变对象在 Java 中完全有效。您可以在调用 mutate 方法后看到更改。

原语案例::

请记住,对于基元,您不能使用 Java 执行此操作。所有原始变量都是不可变的。

如果你想实现与 Java 相同的原语,你可以尝试这样的事情

int var = 0;
var = mutate(var);

int mutate(int a) {
    a = a + 1;
    return a;
}