`
scholers
  • 浏览: 615266 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ArrayList对象引用的问题

 
阅读更多
老问题了,之所以贴出来是给大家看看,希望不要出现类似的错误:
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对象,随之也会全部会改变成最后一次的值。
1
0
分享到:
评论
2 楼 scholers 2009-09-18  
pangbuddy 写道
应该在循环中每次都new一个books就好了。
还有个小建议 item 改叫items, books改叫book,这样应该更合理些吧。




这位朋友说的有道理,确实是这样
1 楼 pangbuddy 2009-09-18  
应该在循环中每次都new一个books就好了。
还有个小建议 item 改叫items, books改叫book,这样应该更合理些吧。

相关推荐

    java中ArrayList 、LinkList区别.doc

    ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么ArrayList和LinkedList在性能上有什么差别呢?什么时候应该用ArrayList...

    Java中ArrayList和LinkedList区别

    一般大家都知道ArrayList和LinkedList的大致区别: ...  ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那

    值类型和引用类型的区别

    似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%. 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有...

    Java中Arraylist动态扩容方法详解

    ArrayList的列表对象实质上是存储在一个引用型数组里的,下面这篇文章主要给大家介绍了关于Java中Arraylist动态扩容方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    JAVA面试基础知识题

    25、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递...

    Java中对象传引用与生命周期的结合

    Java中变量的传递,是传值,还是传引用?  之前我对这个"经典"问题,认识很不深刻,直到我在项目中遇到类似下面的问题:  示例A: <SPAN xss=removed>List<Person> perList = new ArrayList(); for (int i...

    C#入门——面向对象等,代码+注释

    第9天 00里氏转换 01里氏转换 M1 M2 M3 M4 person Program 02protected ArrayList集合 ArrayList集合练习 第10天 03_List泛型集合 04_Dictionary 05泛型集合练习 06文件流 FileStream 07StreamReader和StreamWriter...

    Java面向对象阶段小案例——学生信息管理系统

    存放学生数据用我们学过的ArrayList,由于类是一种引用数据类型,所以我们可以将泛型指代成Student 编写逻辑 业务层调用逻辑层,逻辑层调用数据层 知识点 面向对象,ArrayList,泛型,循环,迭代,switch 具体代

    超级有影响力霸气的Java面试题大全文档

    对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的...

    C#嵌套循环和数组的详细讲解PPt

    数组的应用环境 一维数组的的定义 一维数组的元素的引用 一维数组的应用 1、掌握break语句的应用 2、掌握continue语句的应用 3、理解循环嵌套的定义 4、掌握循环嵌套的执行过程 ...使用System.ArrayList 对象

    Java期末考试真题试卷及复习资料【高级编程】

    Java期末考试真题试卷及... 多态 答Java引用变量分为编译时的类型和运行时的类型编译时类型由声明该变量时使用的类型决定运行时类型由实际赋给该变量的对象决定如果两类型不一致就出现多态 3.阻塞 答当前正在执行的线

    java面试题

    对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符...

    《Java和Android开发实战详解》第6到10章源代码-by 南邮-陈杨

    7.4.2 使用this引用对象本身 134 7.5 对象成员 136 7.6 对象使用类变量与方法 137 习题 140 第8章 继承、抽象类与接口 142 8.1 类的继承 142 8.1.1 类层次结构 142 8.1.2 类的继承 143 8.1.3 重写...

    Java语言的科学与艺术(国外计算机科学经典教材)

    本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在...

    Java后端面试问题整理.docx

    • 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、NIO、AIO),熟悉JVM类加载过程与...

    JAVA容器(每天学习一点点20191223)

    List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一无二的性质): 不允许重复的集合。不会有多个元素引用相同的对象。 Map(用Key来搜索的专家): 使用...

    从J2SE到J2EE知识点介绍

    2. ArrayList集合 32 3. LinkedList集合 33 (八).异常处理 34 1. 异常类的产生、捕获与处理 34 2. 抛出异常 36 二. Swing程序设计 38 (一) Swing概述 38 1. 布局管理器 39 2. 流布局管理器 39 3. 边界布局管理器 ...

    Java面试经典题,对JAVA面试很有帮助

    11.ArrayList和linkedList的区别 12.HashMap和HashTable的区别 13.Collection包结构,与Collections的区别 14.Java的四种引用,强弱软虚 15.泛型常用特点 16.Java创建对象有几种方式 17.有没有可能两个不相等的对象...

    Java语言程序设计的课程设计项目——利用Java实现地球系动画完整实现实例(第3部分).pdf

    2、EarthPlanetApplet 程序代码如下 (1)回顾 Java 中的数组 数组也是一个对象,并且数组也是作为方法的对象引用值来传递的。 Image allImagesArray[]= new Image[NUMBER_IMAGES]; 但在创建数组的时候不使用小括号...

    Java 基础核心总结 +经典算法大全.rar

    null 是任何引用类型的初始值 null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流...

Global site tag (gtag.js) - Google Analytics