Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 为什么对象引用在集合it';储存了什么?_Java_Oop_Collections - Fatal编程技术网

Java 为什么对象引用在集合it';储存了什么?

Java 为什么对象引用在集合it';储存了什么?,java,oop,collections,Java,Oop,Collections,我正在玩一些代码,我期待着一个不同的结果。例如,如果我有一些Person对象,并且这些对象被添加到一个集合中(任何),随后对其进行了修改(一个或多个成员),不认为引用也应该在引用/添加它的集合中更新吗? 这是我“玩”的一段代码: 首先,当您创建对象时,对一个对象只有一个引用: Person joe = new Person("Joe", "Armstrong", 65); 然后将其添加到列表中,创建对同一对象的新引用: persons.add(joe); 现在有两个引用,一个是joe,另一个

我正在玩一些代码,我期待着一个不同的结果。例如,如果我有一些
Person
对象,并且这些对象被添加到一个集合中(任何),随后对其进行了修改(一个或多个成员),不认为引用也应该在引用/添加它的集合中更新吗?

这是我“玩”的一段代码:


首先,当您创建对象时,对一个对象只有一个引用:

Person joe = new Person("Joe", "Armstrong", 65);
然后将其添加到列表中,创建对同一对象的新引用:

persons.add(joe);
现在有两个引用,一个是
joe
,另一个保存在集合
persons
中。现在,在最后一步中,您将更改引用:

joe = new Person("Joe", "Jonas", 35);

现在您已经创建了一个新对象,并使用它创建了一个新引用。现在有2个引用和2个独立的对象:一个是引用第二个对象的
joe
,另一个是在引用原始
joe
对象的集合中维护的。

您的列表引用了对象[“joe”,“Armstrong”,65],并且您的变量引用了第二个对象,即[“Joe”,“Jonas”,35]这是因为您创建了一个新对象并将其分配给了
Joe
。该列表不保留对“Joe”等变量的引用,而是保留对对象本身的引用。

当您分配
新人(“Joe”,“Jonas”,35)时
对于变量
joe
,您断开了分配给
joe
变量的原始引用。为了将对
joe
变量中现在保存的新joe对象的引用放入
persons
,您必须
将其添加到
persons
集合,或重新分配引用cont在列表中,不可修改的集合当然是不可修改的。我很确定第一个回答者不会清楚地解释它。我是对的。@Robert Harvey那么你应该自己回答这个问题,这样我就可以向你的魔法低头了。我已经留下了评论,但要清楚地回答这个问题,你需要图表和图表画架。这是对发生的事情更好的解释。
persons.add(joe);
joe = new Person("Joe", "Jonas", 35);