ArrayList对象引用的问题
来源:互联网 发布:ubuntu怎么启动wifi 编辑:程序博客网 时间:2024/06/05 15:33
this.item=new ArrayList(); books = new Books(); ResultSet rs = new DBoperate().getResultSet("select * from tblbooks"); int i=0; while (rs.next()) { books.setBm(rs.getString("bm")); books.setMc(rs.getString("mc")); books.setAuthor(rs.getString("author")); books.setPublisher(rs.getString("publisher")); books.setPubdate(rs.getString("pubdate")); books.setIsbn(rs.getString("isbn")); books.setPrice(rs.getString("price")); books.setLxbm(rs.getString("lxbm")); books.setYm(rs.getString("ym")); books.setPicpath(rs.getString("picpath")); books.setContent(rs.getString("content")); this.item.add(books); }
上面的代码导致ArrayList里面都是同样的值,而且是数据库返回的最后一条记录的值;
曾经一个朋友遇到这样的问题,那我们来分析一下:
books在循环外部定义,那么在循环里面每次都同一个books,循环体对其进行赋值,然后将books的引用放入ArrayList里面;每次循环都在不停的改变其引用的值,那么ArrayList里面也会跟着改变其指引的books的值,那么最后停止循环的时候,ArrayList每个books的值都会被改变成最后一个值;
所以也就不难理解,为啥都是一样的值,并且是最后一个。
或者说这么来解释:
只定义了一个books对象,循环都是在不停的改变其值,并且放入ArrayList里面的对象都是同一个,比如循环了20次,那么也就是加入了20个一模一样的books对象;当books的值最后一次被改变的时候,ArrayList里面由于都是同一个books对象,随之也会全部会改变成最后一次的值。
<不知道原帖地址,请见谅>
转载这篇文章的缘由是我下面一段代码,总是出现同样的问题...但是我没有犯上面的错误,却依然出现了相同的问题.
public ArrayList<Suser> findAll(String keyword) throws Exception {ArrayList<Suser> al=new ArrayList<Suser>();ps=conn.prepareStatement("select userid,name,password from suser where userid LIKE ? OR name LIKE ?");ps.setString(1,"%"+keyword+"%");ps.setString(2,"%"+keyword+"%");rs=ps.executeQuery();while(rs.next()) {//al.add(new Suser(rs.getString("userid"),rs.getString("name"),rs.getString("password")));//Suser sus=new Suser(rs.getString("userid"),rs.getString("name"),rs.getString("password"));//System.out.println(sus.toString());al.add(new Suser(rs.getString("userid"),rs.getString("name"),rs.getString("password"))); //System.out.println(al);}rs.close();ps.close();conn.close();return al;}
用了多种方法,可是最后拿出的ArrayList中的值却都是一样的...十分诡异.
- ArrayList对象引用的问题
- java ArrayList()的引用
- python对象引用的问题
- Java ArrayList中存放引用数据类型的问题
- 知识积累之ArrayList对象引用
- Arraylist的对象排序
- php5 中, 对象引用的注意问题
- 字符串以及对象引用的问题
- 引用和对象的小问题
- 关于java对象的引用问题
- 引用变量与对象的问题
- python对象引用引起的问题
- Java里面对象的引用问题
- List<?> list= new ArrayList<?>为什么这样写 接口引用指向实现类的对象
- 重新分配被锁定对象的对象引用的问题
- js对象引用问题
- 关于ArrayList的问题
- arrayList 的访问问题
- Mongodb安装和使用
- lua5.2.1 支持中文,变向调用C类函数
- 与变量相关扩展-数组(1)
- cocos2d-x游戏引擎开发之流程
- 嵌入式C经典面试题(一)
- ArrayList对象引用的问题
- C# Winform 开源控件
- ExtJs中ComboBox通过表单传值,后台要得到valueField的值---hiddenName
- Fireclipse: Debug from FF straight into Eclipse
- JavaScript中变量的类型及其比较
- 无线网络工具使用
- 黑马程序员_css总结
- poj 1322 Chocolate
- C#控件——DataGridView单位格文本主动换行