修改 getter 的结果是否会影响对象本身?

2022-09-02 03:37:33

我有一个关于在java中使用getter方法的问题。假设我有这个类:

class Test {
    private ArrayList<String> array = new ArrayList<String>();

    public ArrayList getArray() {
        return this.array;
    }

    public void initArray() {
        array.add("Test 1");
        array.add("Test 2");
    }
}

class Start {
    public static void main(String args[]) {
        initArray();
        getArray().remove(0);
    }
} 

我的问题是:

是否会修改实际的数组列表对象(从中删除“Test 1”)?我想我已经在一些地方看到了这一点,但我认为获取者只是提供了该对象的副本。不是对它的引用。如果它确实以这种方式工作(作为参考),那么这也有效吗(类Test的arraylist对象也会被这个改变吗)?

class Start {
    public static void main(String args[]) {
        initArray();
        ArrayList aVar = getArray();
        aVar.remove(0);
    }
} 

答案 1

Java 返回对 Array 的引用,因此它不会是副本,它将修改 List。通常,除非它是基元类型(,等),否则您将获得对对象的引用。intfloat

如果要返回副本,则必须自己显式复制数组。


答案 2

按照我的理解,对象引用变量只不过是对象本身的内存地址。因此,从 getArray() 返回的是该 ArrayList 的引用变量。一个对象可能有许多引用变量,但它仍然是被修改的同一对象。

Java所做的一切都是按值传递的。因此,无论何时将对象引用变量作为参数传递或返回其值,都是在传递或返回对象引用变量的值。


推荐