为什么我的Java方法不能更改传递的变量?

这个问题在这里已经有了答案:

  • Java是“通过引用传递”还是“按值传递”? 78个答案

  • 对象引用通过Java中的值传递,因此分配给方法内的局部变量不会更改原始变量。 只有局部变量s指向一个新的字符串。 用一点ASCII艺术可能会更容易理解。

    最初你有这样的:

    ------------
    | nullTest |
    ------------
         |
        null
    

    当你第一次输入setNotNull方法时,你会得到s中nullTest值的副本。 在这种情况下,nullTest的值是空引用:

    ------------    ------------
    | nullTest |    |    s     |
    ------------    ------------
         |               |
        null            null
    

    然后重新分配s:

    ------------    ------------
    | nullTest |    |    s     |
    ------------    ------------
         |               |
        null         "not null!"
    

    然后离开方法:

    ------------
    | nullTest |
    ------------
         |
        null
    

    Java不通过引用传递,它传递引用的值。 当您分配s="not null" ,您正在重新分配该值。


    我希望做一些像setNotNull(MyObject o)而不使用o = setNotNull(o)

    简而言之,你不能。 你会得到最接近的是这样的:

    public class MyRef<T> {
        private T obj;
    
        public T get() {
            return obj;
        }
    
        public void set(T obj) {
            this.obj = obj;
        }
    
        public void setNotNull(T obj) {
            if (this.obj == null) {
                this.obj = obj;
            }
        }
    }
    
    MyRef<MyObj> ref = new MyRef<MyObj>();
    ref.setNotNull(xyz);
    System.err.println(ref.get());
    

    这些都很笨重,可能不值得付出努力。

    链接地址: http://www.djcxy.com/p/3521.html

    上一篇: Why can't my Java method change a passed variable?

    下一篇: How does Arrays.sort() change the variable passed to it?