2 回答
TA贡献2019条经验 获得超9个赞
您Employee两次添加了相同的引用:
e.setEmployeeName("Rishabh Bansal");
list.add(e);
e.setEmployeeName("Jack Reacher");
list.add(e);
但是这两个引用仍然指向同一个对象,你正在改变它。
所以你也应该在这里创建新对象。
TA贡献1811条经验 获得超6个赞
这是您的列表在前两个 add() 之后的样子:
[oid1, oid2]
oid1 和 oid2 是指向其状态保存在别处的对象的“指针”(引用):
oid1 := Employee("1026751","Jack Reacher")
oid2 := Employee("1026722","Tom Cruise")
在两个 .get() 之后,您在这些对象上有两个“句柄”:
e == oid1
p == oid2
然后清除列表,使列表变为:
[]
然后您更改两个对象之一的状态并将其添加到列表中,以便您拥有:
[oid1]
oid1 := Employee("1026751","Rishabh Bansal")
oid2 := Employee("1026722","Tom Cruise")
然后您更改同一对象的状态并将其再次添加到列表中,这样您就拥有:
[oid1, oid1]
oid1 := Employee("1026751","Jack Reacher")
oid2 := Employee("1026722","Tom Cruise")
所以索引 0 上的对象仅仅因为你的要求而改变了。如果你只有一个对象,你就只有一种状态。想要列表中的三个州?需要三个对象。
添加回答
举报