Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在Java中改变参数吗? 在C++中,我可能会做如下的事情: sometype var = somevalue; mutate(var); // var is now someothervalue void mutate(sometype &a) { a = someothervalue; } 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; }_Java_Oop_Mutation - Fatal编程技术网

我可以在Java中改变参数吗? 在C++中,我可能会做如下的事情: sometype var = somevalue; mutate(var); // var is now someothervalue void mutate(sometype &a) { a = someothervalue; } 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; }

我可以在Java中改变参数吗? 在C++中,我可能会做如下的事情: sometype var = somevalue; mutate(var); // var is now someothervalue void mutate(sometype &a) { a = someothervalue; } 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; },java,oop,mutation,Java,Oop,Mutation,Java中是否有类似的东西 我正在努力实现以下目标: sometype var = somevalue; mutate(var); // var is now someothervalue void mutate(sometype &a) { a = someothervalue; } Customer a; public static void main(String[] args) { a = newCustomer("Charles"); Custom

Java中是否有类似的东西

我正在努力实现以下目标:

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

void mutate(sometype &a) {
    a = someothervalue;
}
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);
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;
}

原语是不可变的,但这是你的问题吗?这个例子只是为了说明。其他对象是可变的(不是全部)。是的,不幸的是,这行不通。唯一的方法是用其他东西包装int。看见我倾向于使用原子整数。在这个链接中有很多很好的答案——看这个例子并没有展示易变性。两者都只是描述用另一个引用/值覆盖一个引用/值。此外,由于java是按值调用的,所以引用(将其看作指针,因为java引用与C++引用不相同)将在函数中复制。除非您执行类似于
a=
(例如
a.setValue(7)
或对于公共成员
a.member=7
)的操作,否则某些类型的状态不会更改。@patrik同意您的意见。澄清了我的回答:)