我有兩個包含HashMap定義如下:爲什麼此HashMap被作爲引用傳遞
HashMap EventTable = new HashMap();
HashMap MainTable = new HashMap();
現在,假設我中插入一些數據事件表:
EventTable.put("name", "Test Event Name");
然後,假設我們插入事件表進入MainTable:
MainTable.put("table", EventTable);
,然後打印出MainTable:
現在{table={name=Test Event Name}}
如果我修改事件表如下:
EventTable.put("more names", "More test events");
這改變了MainTable還有:
{table={more names=More test events, name=Test Event Name}}
所以,很顯然,事件表是由參考MainTable通過。
我不明白爲什麼EventTable通過引用傳遞。
理想情況下,我想重用EventTable HashMap來創建其他條目,同時保留我的舊條目,所以我想通過值傳遞EventTable。
編輯:
忘記在主要問題提到這一點,但是當我添加一個字符串MainTable,當我後來修改字符串不會改變。那麼字符串的行爲如何呢?
http://stackoverflow.com/questions/40480/is-java-pass-by-reference – assylias
EventTable不通過引用傳遞 - 如果您重新分配EventTable與'EventTable = new HashMap'插入到MainTable中後,它不會更改MainTable的內容。 – assylias
好吧,我想我明白了。 EventTable仍然指向與HashMap條目相同的位置,所以當我重新分配事件表時,它不再影響HashMap條目了,對嗎? – Chaos