java語言基礎 問題(資料型別問題)
阿新 • • 發佈:2018-12-11
今天在網上發現了一個問題,把我整迷糊了!研究了1陣子,發表一下,供人蔘考!
List<List<String>> fatherlist=new LinkedList<>();
List<String> childlist=new ArrayList<>();
childlist.add("111"); //步驟1
fatherlist.add(childlist);//步驟2
childlist.add("222");//步驟3 ----這裡的新增跟上面有什麼關係 為什麼會讓fatherlist集合中新增記錄
for (int i = 0; i < fatherlist.size(); i++) {
System.out.println(str);//輸出的是111 222
}
}
我在不知道答案的時候以為只輸出111 因為按照順序 fatherlist在childlist新增222之前就放在了 fatherlist裡
後來經過我凱哥的幫助 知道了答案
fatherlist是添加了orderlist的記憶體地址,當orderlist裡新增222的時候 fatherlist引用的orderlist的值也發生了改變!
我做了個比方:childlist是樓裡的一層,fatherlist是一個大樓,當childlist新增到大樓裡,不管你在這一層加多少的宿舍都屬於這個大樓!
經過這個問題,我又聯想到了這個跟引用型別有關係嗎?
我問String 和Date都是引用型別 為什麼不會出現這種問題?
別人告訴我它們是特殊的引用型別。。。。
每次給他們重新複製都會新建一個記憶體地址存放不會改變原來的值
(2017-10-30)記錄