Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从多个对象引用同一ArrayList_Java - Fatal编程技术网

Java 从多个对象引用同一ArrayList

Java 从多个对象引用同一ArrayList,java,Java,我想知道如何从多个对象引用同一ArrayList。 下面不是一个真实的例子,它只是为了解释而编造的 如果我有一个带有ArrayList字段的CarCatalog类: ArrayList<Car> cars = new ArrayList<>(); 并将参数指定给CarCreator对象中的字段: class CarCreator { ArrayList<Car> cars; public CarCreator(ArrayList cars)

我想知道如何从多个对象引用同一ArrayList。 下面不是一个真实的例子,它只是为了解释而编造的

如果我有一个带有
ArrayList
字段的
CarCatalog
类:

ArrayList<Car> cars = new ArrayList<>();
并将参数指定给
CarCreator
对象中的字段:

class CarCreator {
    ArrayList<Car> cars;

    public CarCreator(ArrayList cars) {
        this.cars = cars;
    }
}
它是否也会出现在
CarCatalogs
字段中?

是的。当你写作时:

ArrayList<Car> cars = new ArrayList<>();
ArrayList cars=new ArrayList();
cars不是
阵列列表
。它是对
阵列列表的引用。这是至关重要的,因为当你传递
汽车时,你传递的是对原始列表的引用。因此,在一个对象中修改列表将意味着这些更改在第二个对象中可见


这里有一个关于不可变对象的有力论据。也就是说,无法更改的对象。显然,这并不总是可行的,所以你需要弄清楚谁拥有这个列表,谁可以更改它,并尽可能地传递副本或不可变的版本。这通常被称为防御性编程。

你试过吗?反问句是反问句。你可以试试看。也就是说,您似乎不了解对象在Java中是如何工作的;您可能希望阅读Oracle提供的教程,或者获得一本关于Java的优秀初学者书籍。不理解基本原理会使编写代码变得非常非常困难。
this.cars
ArrayList<Car> cars = new ArrayList<>();