簡體   English   中英

更改main方法后,將TreeMap實例傳遞給構造函數的行為是什么

[英]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

如果我在主方法中運行以下序列:

  • (1)將derkMap實例傳遞給某個ClassB構造函數(即在我的主要方法ClassB objectB = new ClassB(derkMap);實例化ClassB objectB = new ClassB(derkMap); )。
  • (2)調用derkMap.get(1L).doSomething(); 從主要方法。
  • (3) 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM