我對你可以更改對象中的字段而不實際使用它們的操作的方式感到困擾。例如說我有以下課程: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
提交
取消