[英]What is the behavior of a TreeMap instance passed into a constructor following changes in main method
假設我有安裝程序:
TreeMap<Long,ClassA> derkMap = new TreeMap<Long,ClassA>();
derkMap.put(1L,new ClassA());
請注意, ClassA
具有public void doSomething()
,當調用它時,它將永久更改實例的狀態(以哪種確切方式與該問題無關)。 請注意,一旦調用doSomething()
, ClassA
具有一個public boolean hasItBeenCalled()
,該public boolean hasItBeenCalled()
將返回true
; 否則,如果未調用doSomething()
它將返回false
。
如果我在主方法中運行以下序列:
derkMap
實例傳遞給某個ClassB
構造函數(即在我的主要方法ClassB objectB = new ClassB(derkMap);
實例化ClassB objectB = new ClassB(derkMap);
)。 derkMap.get(1L).doSomething();
從主要方法。 ClassB
實例(即objectB
)內,嘗試derkMap.get(1L).hasItBeenCalled()
。 (3)會返回true
還是false
?
Java中的一切都是通過價值傳遞的。 推薦讀物: 這 及其后續內容 。
編輯:甚至推薦閱讀: Java是“按引用傳遞”還是“按值傳遞”?
另一個編輯:這個問題在編輯問題時不再有意義,但我將其保留,因為我認為這是OP真正困惑的地方。
它應該返回true。 這是因為當您將map作為classB的參數傳遞時,其引用將按值復制,並且仍指向原始地圖。 如果您在map內部調用元素的方法,它仍會在原始地圖上執行這些方法。
編輯
順便說一句,在我回答了這個問題之后,我花了3分鍾時間通過編寫示例代碼進行驗證。 我只是想知道為什么您自己還沒有嘗試過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.