我对你可以更改对象中的字段而不实际使用它们的操作的方式感到困扰。例如说我有以下课程:public class MultisetPair { private Object element ; private int cardinality ; public MultisetPair(Object element) { this.element = element ; cardinality = 1 ; } public Object getElement() { return element ; } public int getCardinality() { return cardinality ; } public void setCardinality(int cardinality) { if(cardinality < 1) throw new IllegalArgumentException(); this.cardinality = cardinality ; }}我有一个 MultisetPair 对象列表,如下所示:LinkedList<MultisetPair> multilist = new LinkedList<>();我会做类似的事情:MultisetPair pair = multiset.get(3);pair.setCardinality(pair.getCardinality()+1);这不仅会改变我刚刚创建的对的基数,还会使 multisetpair(3) 处的对的基数大一。这是为什么?它不应该只改变我创建的那对而不是实际的那对吗?
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
MultisetPair pair = multiset.get(3); pair.setCardinality(pair.getCardinality()+1);
这不仅改变了我刚刚创建的对的基数,它还会使 multisetpair(3) 处的对的基数大一。
因为这两个对象……是同一个对象。上面没有两个对象。您有一个局部变量pair
,它在位置 3 处引用列表的内容。这就是全部内容。
当你把一个鸡蛋放进一个盒子里,然后你把盒子打开,然后你选择那个盒子里的第三个鸡蛋,然后给它上色……然后那个盒子里的第三个鸡蛋就上色了。
换句话说:你可以有多个指向同一个底层对象的引用。您使用哪个引用来访问该对象并不重要,只要您更改该对象的状态,该对象就会更新。
添加回答
举报
0/150
提交
取消