`

List 列表中的对象在循环中的声明问题

 
阅读更多
请看下面两段代码。。MessageTopic对象建立的位置,直接导致了保存在List中MessageTopic对象的改变
第一段代码
public static List<MessageTopic> getTopicList(ResultSet rs) {
		List<MessageTopic> ml = new ArrayList<MessageTopic>();
		if(rs != null) {
			try {
				while(rs.next()) {
					MessageTopic mt = new MessageTopic();
					mt.setTopicid(rs.getString("topicid"));
					mt.setTopicInterester(rs.getString("topicinterester"));
					mt.setTopicName(rs.getString("topicname"));
					ml.add(mt);
				}
				return ml;
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				ResultManager.closeTranscation();    //关闭相应连接
			}
		}
		return null;
	}
无可厚非,第一段代码是正确的。。 细看第二段代码

 

第二段代码
public static List<MessageTopic> getTopicList(ResultSet rs) {
		List<MessageTopic> ml = new ArrayList<MessageTopic>();
		MessageTopic mt = new MessageTopic();
		if(rs != null) {
			try {
				while(rs.next()) {
					mt.setTopicid(rs.getString("topicid"));
					mt.setTopicInterester(rs.getString("topicinterester"));
					mt.setTopicName(rs.getString("topicname"));
					ml.add(mt);
				}
				return ml;
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				ResultManager.closeTranscation();    //关闭相应连接
			}
		}
		return null;
	}

      在第二段代码中,在while循环之外声明了MessageTopic对象,其结果导致在ArrayList列表中保存的MessageTopic对象,均为跳出循环之前最后一个被修改的对象,即:列表当中的所有对象与最后一个在循环中被修改的对象一模一样。。

      这是在编程中非常容易出现的错误。。切记。。

分享到:
评论

相关推荐

    java面试宝典

    16、在JAVA 中,如何跳出当前的多重嵌套循环? 9 17、构造器Constructor 是否可被override? 9 18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 ...

    Scala快速从入门到神坑

    5.2 列表(List) 5.3 元组(Tuple) 5.4 集(Set) 5.5 映射(Map) 5.6 迭代器(Iterator) 六、类(Class) 6.1 简单的类 6.2 给类增加字段和方法 6.3 创建对象 6.4 编译和执行 6.5 getter 和setter方法 6.6 辅助构造器 6.7 ...

    C#数据实体类中如何给属性赋值

    数据实体类中如何给属性赋值.因为从数据库中取出来的是一个DataSet如果一个一个给数据实体类中的属性赋值显的非常的笨拙,而且我们的数据表多达100个.在网上搜索了下写出了个简单的方法,代码如下: 首先我们做个实体...

    java笔记.docx

    Java中的变量必须先声明后使用。 Java中的数组是对象,可以使用new关键字创建。 Java中的字符串是不可变的,可以通过加号进行连接操作。 Java中的条件语句使用关键字if-else实现,也可以使用switch语句。 Java中的...

    java 面试题 总结

    对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session ...

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

     对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。  Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless ...

    VC++ 专家指导.doc

    (95) 我在一对话框中有一列表框,我需要tabbed列表框中的项目。但是,当我处理含有tab字符(用AddString添加的)的列表项时,tab被显示成小黑块而没有展开。哪儿出错了? 72 (96) 我建立了一个应用程序,并使用了...

    深入理解Python中变量赋值的问题

    Python是动态类型语言,也就是说不需要预先声明变量类型,变量的类型和值在赋值那一刻被初始化,下面详细介绍了Python的变量赋值问题,一起来学习学习吧。 我们先看一下如下代码: c = {} def foo(): f = dict(zip...

    Visual Basic 2010入门经典.part1.rar

    8.3 在图像列表(Image List)控件中存储图片 140 8.4 使用列表视图(List View)控件创建增强的列表 141 8.4.1 创建列 141 8.4.2 添加列表项 142 8.4.3 使用代码操纵List View 143 8.5 使用Tree View创建层次...

    Visual Basic 2010入门经典.part2.rar

    8.3 在图像列表(Image List)控件中存储图片 140 8.4 使用列表视图(List View)控件创建增强的列表 141 8.4.1 创建列 141 8.4.2 添加列表项 142 8.4.3 使用代码操纵List View 143 8.5 使用Tree View创建层次...

    freemarker总结

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...

    《你必须知道的495个C语言问题》

    1.11 extern在函数声明中是什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过...

    PLSQLDeveloper下载

    以后能够从To-Do列表中访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试...

    LINGO软件的学习

    当用隐式罗列方式时,只需在集成员列表中输入首成员和末成员,而中间的成员由LINGO产生。 另一方面,派生集是由其它的集来创建。这些集被称为该派生集的父集(原始集或其它的派生集)。一个派生集既可以是稀疏的,也...

    PL/SQL Developer8.04官网程序_keygen_汉化

    以后能够从To-Do列表中访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器  可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试...

    ASP.NET应用与开发案例教程

    下篇ASP.NET在实际中的应用与开发 第11章留言板的实现 11.1系统功能及结构描述 11.2数据库的实现 11.3各功能模块的具体实现 11.4小结 11.5习题 第12章网上书店开发实例 12.1网上书店的系统设计 12.2网上书店的数据库...

Global site tag (gtag.js) - Google Analytics