List集合add方法覆蓋原來的內容解決辦法


今天遇到一個有意思的問題,當我遍歷數組的同時在for循環中使用list.add(),但這樣會將之前的內容也覆蓋掉。本來有3條數據,但這樣會得到三條相同的數據

T t =new T();
List<T> tList = new List<T>();

for(int i=0;i<10;i++){
  t.num=i;
  tList.add(t);        
}

這種情況中tList存的是t的引用(地址),所以add的所有值其實都相同,就是t最開始new時的地址中的值。

解決辦法:

  在循環中將你的對象再new一次

原因:

  當使用List<T>時,如果T是引用類型,保存的是引用,如果是值類型,保存的是值本身。

1、T是對象是,也就是說如果是引類型時,在循環外邊已經new了一個類型為T的對象,相當於這個對象的地址在內存空間已經開辟出來了,保存到了固定的位置,這時候我們使用add方法時,會增加值的個數,但引用地址不變,所以后面的值會覆蓋掉前面的值

2、T是值對象時,這種和上面就不一樣了,值對象用來保存一組不會改變的量,當我們需要使用這個對象時,會在系統中開辟另一個空間。因此,值對象使用add方法時不會出現覆蓋問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM