【发布时间】:2014-09-08 16:27:39
【问题描述】:
我在 Stackoverflow 中阅读了几篇文章和类似的问题;但是,我并没有完全得到我的问题的答案。 代码如下:
public class CoinFlipping {
Random random = new Random();
Boolean head = null;
public void flip(Boolean b){
b = random.nextBoolean();
// head = b;
}
public static void main(String [] args){
CoinFlipping cf = new CoinFlipping();
cf.flip(cf.head);
System.out.println("Head: "+cf.head);
}
}
我参考这篇文章:Is Java "pass-by-reference" or "pass-by-value"?
我可以理解为什么那段代码的行为如此。当我们调用new dog() 时,我们基本上创建了一个新的 Dog 对象。我知道了。但是,我提供的示例似乎有点令人困惑。在这种情况下,我没有创建对象(不是吗?)。我正在改变一个值。那么为什么在这种情况下,当我打印结果时,我得到的是null 而不是true 或false?
【问题讨论】:
-
b = random.nextBoolean();创建一个新引用,因此修改b的值,而不是b引用的值。 -
@AntonH: b 没有“引用一个值”。 b 具有一个值,它是对对象的引用(或空引用)。赋值语句给 b 一个新值(即对新对象的引用)。
-
@jameslarge 我试图简化,以便 OP 看到问题所在。但显然太多了。
-
链接问题的答案直接解决了这个问题。请参阅stackoverflow.com/a/40507/217324 将其作为副本关闭。
-
@AntonH 你好,我说对了吗?当我将任何对象传递给方法时,会发生以下情况:它通过引用查找对象的值,复制它并将这个副本分配给本地 var(参数)?在这种情况下,我还有另一个问题。有什么方法可以传递对方法的引用,以便我可以获取这个引用、访问对象并更改它的内部状态?有没有办法实际引用原始对象但不在方法内部复制?
标签: java pass-by-reference pass-by-value