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);