今天做一个小项目时,出现一个老是解决不了的问题,就是将对象放入ArrayList时,发现保存所有的对象都是一样的。比较神奇
以下是出问题部分源代码:
TradeInfo trade = new TradeInfo();
while(rs.next()){
trade.setDatetime(rs.getString(1));
trade.setMoney(rs.getDouble(2));
trade.setBalance(rs.getDouble(3));
trade.setTrade(rs.getString(4));
list.add(trade);//将trade对象保存起来
}
System.out.println("*******"+list.size());
for(int i=0; i<list.size(); i++){
System.out.println("第"+i+"项的时间:"+list.get(i).getDatetime());
}
以下是解决后的代码
TradeInfo trade = null;
while(rs.next()){
trade = new TradeInfo();
trade.setDatetime(rs.getString(1));
trade.setMoney(rs.getDouble(2));
trade.setBalance(rs.getDouble(3));
trade.setTrade(rs.getString(4));
list.add(trade);//将trade对象保存起来
}
System.out.println("*******"+list.size());
for(int i=0; i<list.size(); i++){
System.out.println("第"+i+"项的时间:"+list.get(i).getDatetime());
}
总结:前一段代码相当于只声明了一个对象,所以List中保存的对象都是一个,后面每次改变都会改变前面保存的对象;后面一段代码每个对象都是不同的,除了名字是一样,在内存中的地址是不同的,所以保存的对象都不同。看起来很简单的问题,实际中还是很容易出错的。