SSM專案問題中遇到 ArrayList新增元素的問題
阿新 • • 發佈:2018-12-10
記錄專案開發中 一次有趣的debug經歷
本來是在做單元測試的,但是發現如下程式碼 有問題..
ProductCategory p = new ProductCategory();
for (int i = 1; i <= 5; i++) {
p.setCreateTime(new Date());
p.setPriority(i);
p.setShopId((long)(i));
p.setProductCategoryName("測試店鋪種類"+(i+3));
list.add(p);
}
列印list裡面物件的ProductCategoryName
發現如下
測試店鋪種類8
測試店鋪種類8
測試店鋪種類8
測試店鋪種類8
測試店鋪種類8
我甚至還以為是ArrayList的add函式會去重 (人工智障),看了一下原始碼
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
發現沒什麼不妥。
多測試了幾下 發現 list 每次增加物件的時候 list是單純把相應index賦值為物件。
因此我上面物件 看似存了5次,但其實,最後列印的時候 列印的是同一個物件, 即最後一次的修改資訊
所以有 5個測試店鋪種類8
正確寫法
每次new一個新的物件 加入到list中
for (int i = 1; i <= 5; i++) {
p = new ProductCategory(null,(long)i,"test"+i+10,i,new Date());
//p.setCreateTime(new Date());
//p.setPriority(i);
//p.setShopId((long)(i));
//p.setProductCategoryName("測試店鋪種類"+(i+3));
list.add(p);
}
感悟
本身那麼建立一個物件,目的是為了減少記憶體開銷
但是這樣做的結果就是list中儲存的物件都是用一個
特此標註一下 謹防以後再犯錯