在下面的代码中,为什么 foo2 在 system.out.print 中打印数据时为 null?
public class Helper {
public void shadowCopy(Foo foo1, Foo foo2){
foo2 = foo1;
}
public static void main(String[] args) {
Helper h = new Helper();
Foo foo1 = new Foo(50);
Foo foo2= null;
h.shadowCopy(foo1, foo2);
System.out.println(foo2.data);// why java.lang.NullPointerException?
}
public static class Foo {
public int data=0;
public Foo(int data){
this.data = data;
}
}
}
最佳答案
在 shadowCopy
中,foo2
是对 main
中 foo2
所引用的同一对象的复制引用。但是,它仅分配其本地 foo2
引用来引用与 foo1
相同的对象。它不会更改 main
中的 foo2
引用变量,该变量仍为 null
。这导致了 NPE。
要获得所需的行为,只需将 foo2 = foo1;
放入 main
中,这样您就不需要处理引用变量的副本。
关于java - 这是如何适应java中的 "pass by value of refrences"的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772481/