有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在数组中绑定Java引用

我有一个非常简单的代码。我试图弄清楚如何同时改变数组中的对象引用和第一次放入数组中的对象引用我想知道如何绑定这两个引用/值

在JavaScript中,在按值传递方面与Java非常相似,我们可能能做的最好的事情就是使用Object。像这样观察:http://www.html5rocks.com/en/tutorials/es7/observe/

但是有了Java,我想知道是否有一种不用编写自己的库就能做到这一点的好方法

 public class ArrayRefVal {

    public static void main(String[] args) {
        ArrayList<Object> al = new ArrayList<Object>();
        Object s = new Object();
        al.add(s);
        s = null;
        System.out.println(al.get(0));
    }
}

同样地:

public class ArrayRefVal {

    public static void main(String[] args) {
        ArrayList<Object> al = new ArrayList<Object>();
        Object s = new Object();
        al.add(s);
        al.set(0, null);
        System.out.println(s);
    }
}

事实证明,JavaScript在这一点上与Java具有相同的行为。如何将数组中的元素与对象s绑定,从而在更改数组中的元素时更改原始对象

我已经提过了吗我想知道如何绑定这两个引用/值


共 (1) 个答案

  1. # 1 楼答案

    您不能以自己喜欢的方式进行操作,因为您不能更改Java中的现有字符串,也不能以非显式方式更新局部变量s(不使用=+=之类的赋值运算符)。如果你想要这种间接性,你可以引入一些中间的参考对象:

    public class ArrayRefVal {
        static class Ref<T> {
            T obj;
    
            public Ref(T obj) {
                this.obj = obj;
            }
    
            @Override
            public String toString() {
                return String.valueOf(obj);
            }
        }
    
        public static void main(String[] args) {        
            ArrayList<Ref<String>> al = new ArrayList<>();
            Ref<String> s = new Ref<>("hiii");
            al.add(s);
            al.get(0).obj = "barg"; 
            System.out.println(s); //prints "barg"
        }
    }
    

    然而,你应该注意在任何需要的地方使用Ref