List存储的是对象的引用
ResultSet rs = stmt.executeQuery("select * from " + tableName);
List<ImsData> dataList = new ArrayList<ImsData>();
ImsData imsData = new ImsData();
while(rs.next()){
imsData.setBenchmarkCmName(rs.getString(1));
imsData.setMeasureCmName(rs.getString(2));
dataList.add(imsData);
}
下面代码为正确
ResultSet rs = stmt.executeQuery("select * from " + tableName);
List<ImsData> imsDataList = new ArrayList<ImsData>();
while(rs.next()){
ImsData imsData = new ImsData();
imsData.setBenchmarkCmName(rs.getString(1));
imsData.setMeasureCmName(rs.getString(2));
imsDataList.add(imsData);
}
只有第二段代码中的imsDataList才是完整的list,第一段代码imsDataList的list最终都是最后imsData的值,当时list中
的size都是正常。
在输出时发现输出的数据都是最后一条,前面的数据完全被覆盖,
解决这个问题很简单就是把ImsData imsData = new ImsData();这一句代码放进while循环内.
为什么会出现这样的情况呢?原因在于ArrayList的add()方法添加的是对象的引用,
如果上述一行代码在while循环外面,那么创建的对象引用始终只有一个,
而while循环内一直在改变对象的各个变量,直至while循环结束,而添加进入users的引用始终是不变。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。