循环往list中add对象却总是add的是一个对象
生活随笔
收集整理的這篇文章主要介紹了
循环往list中add对象却总是add的是一个对象
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
原因解釋:
- 在new 一個對象的時候,對象的ID是唯一確定的;
- 將對象add入list中時,放入list中的其實是對象的引用 ;
- 而每次循環(huán)只是簡單 的set 對象的屬性,set新的屬性值,而add進list中的對象還是同一個對象id,也就是同一個對象;
所以每次add之后,list發(fā)現(xiàn)對象引用和之前元素一樣,就覆蓋掉了之前add的對象。所以循環(huán)之后list中的對象是重復(fù)的對象。
解決方法:
想要避免這個問題只要每次add時保證對象引用都是不同的即可,即每循環(huán)一次重新new一個對象。new的對象應(yīng)該放在for循環(huán)內(nèi),每循環(huán)一次重新new一個新對象
原來代碼:
for (String qcId : qcIds) {List<String> qcNames = qualityCheckDao.getQcNameByQcId(qcId);if(null==qcNames||qcNames.size()<=0){logger.error("質(zhì)檢規(guī)則id沒有對應(yīng)的規(guī)則名,借單號:" + checkBean.getBorrowNid()+",規(guī)則id:"+qcId);return new ResponseEntity(Constants.System.FAIL, "質(zhì)檢規(guī)則id沒有對應(yīng)的規(guī)則名,借單號:" + checkBean.getBorrowNid()+",規(guī)則id:"+qcId);}newCheckBean.setQcName(qcNames.get(0));qualityCheckBeans.add(newCheckBean);}解決代碼:
for (String qcId : qcIds) {QualityCheckBean newCheckBean = new QualityCheckBean();try {BeanUtils.copyProperties(newCheckBean,checkBean);} catch (Exception e) {e.printStackTrace();}List<String> qcNames = qualityCheckDao.getQcNameByQcId(qcId);if(null==qcNames||qcNames.size()<=0){logger.error("質(zhì)檢規(guī)則id沒有對應(yīng)的規(guī)則名,借單號:" + checkBean.getBorrowNid()+",規(guī)則id:"+qcId);return new ResponseEntity(Constants.System.FAIL, "質(zhì)檢規(guī)則id沒有對應(yīng)的規(guī)則名,借單號:" + checkBean.getBorrowNid()+",規(guī)則id:"+qcId);}newCheckBean.setQcName(qcNames.get(0));qualityCheckBeans.add(newCheckBean);}總結(jié)
以上是生活随笔為你收集整理的循环往list中add对象却总是add的是一个对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL中的UNIX_TIMESTAM
- 下一篇: idea 关于高亮显示与选中字符串相同的