参见英文答案 > Is Java “pass-by-reference” or “pass-by-value”? 78个
在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?
解决方法:
看起来你对Mutability感到困惑.可变性只是改变对象状态.您在示例中显示的不仅仅是可变性.您通过将该实例引用到其他实例(=)来完全更改实例.
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;
}
标签:java,oop,mutation 来源: https://codeday.me/bug/20190622/1265704.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。