【发布时间】:2014-09-10 18:25:18
【问题描述】:
在下面的代码中,为什么 foo2 在 system.out.print 打印其数据时为空?
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;
}
}
}
【问题讨论】:
-
Java 仅按值传递,因此您的
shallowCopy方法不会执行任何操作。 -
@Cgraphics foo2 为空,因此它会使 foo1 也为空。它是通过引用而不是通过价值。意味着您整个对象为空,而不仅仅是数据部分...
-
@Peter
shadowCopy,而不是shallowCopy
标签: java pass-by-reference pass-by-value