java - 这是如何适应java中的 "pass by value of refrences"的?

标签 java pass-by-reference pass-by-value

在下面的代码中,为什么 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 是对 mainfoo2 所引用的同一对象的复制引用。但是,它仅分配其本地 foo2 引用来引用与 foo1 相同的对象。它不会更改 main 中的 foo2 引用变量,该变量仍为 null。这导致了 NPE。

要获得所需的行为,只需将 foo2 = foo1; 放入 main 中,这样您就不需要处理引用变量的副本。

关于java - 这是如何适应java中的 "pass by value of refrences"的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772481/

相关文章:

Java 连接从 jar 失败,但在 Eclipse 中正常

java - 有没有一种方法可以使用 MongoDB/Java 将 BasicDBObject 渲染到 Map<String,String> 中?

C++ 通过引用将 `this` 传递给方法

c++ - 通过引用多个线程传递变量会破坏堆

java - 为什么java同时使用值传递和引用传递?

java - 使用 Winium 实现 "Chrome Legacy Window"(Chromium) 的自动化

java - Neo4j - 如何处理不兼容的 RestGraphDatabase 调用

c++ - 初始化列表引用类型安全

java - 按值传递 - 树未删除

java - 如何不通过引用将元素从 ArrayList 复制到另一个?