`

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从list中取出对象并获得其属性值的方法

    在Java编程中,有时我们需要从一个`List`中获取对象的属性值,特别是在处理各种不同类型的对象集合时。本文将详细介绍如何使用Java的反射机制来实现这一目标。 首先,让我们理解一下`List`接口和反射的基本概念。`...

    c# 循环生成XML方法

    在给定的代码示例中,通过`for`循环遍历了一个列表`list`,为每个元素创建了多个子元素: ```csharp for (int i = 0; i &lt; list.Count; i++) { ShengLi.Model.SysPageUrl _model = list[i]; // 选取根元素 ...

    List用法汇总.zip

    `List` 提供了动态数组的功能,允许我们在列表中存储任意数量的元素,并可以方便地进行添加、删除、查找等操作。在这个名为“List用法汇总.zip”的压缩包中,我们很可能会找到关于如何使用 `List` 的一系列技巧和...

    浅谈Java中的Set、List、Map的区别.docx

    List 的 get(int index) 方法返回集合中由参数 index 指定的索引位置的对象,下标从“0” 开始。 最基本的两种检索集合中的所有对象的方法: 1. for 循环和 get() 方法: for(int i=0; i&lt;list.size();i++){ ...

    QT-qml轮播图自动循环

    在本示例中,“QT-qml轮播图自动循环”是使用QML来实现的一种常见UI组件——轮播图(Carousel),通常用于展示如广告、图片或信息等元素,具有自动循环和手动滑动的功能,类似于京东电商移动应用中的滚动图展示。...

    C# List用法详解

    2. 创建List对象:List&lt;T&gt; testList = new List(IEnumerable&lt;T&gt; collection); 例如:string[] temArr = { "Ha", "Hunter", "Tom", "Lily", "Jay","Jim", "Kuku", "Locu" }; List&lt;string&gt; testList = new List(temArr...

    dwr 查询返回list处理

    1. **DWR的配置**:在使用DWR之前,需要在Web应用的配置文件(如`dwr.xml`)中声明允许被远程调用的Java类和方法。这样,DWR引擎才能知道哪些Java方法可以被JavaScript访问。 2. **Java服务端处理**:在服务端,...

    dwr回调函数得到后台list

    在DWR配置中,你需要声明`MyAction`类以及`selectUserData`方法,这样DWR才能知道如何调用它: ```xml ``` 接下来,在JavaScript中,我们可以调用这个服务器端的方法,传递参数并提供一个回调函数来...

    C# List用法详解,可作为C#开发参考。

    - 可以使用 `foreach` 循环遍历 `List` 中的所有元素: ```csharp foreach (string s in myList) { Console.WriteLine(s); } ``` **4. 删除元素** - **删除指定元素** ```csharp myList.Remove("Hunter...

    C++Builder中实现控件数组的功能

    - 在构造函数(TForm1的构造函数)中初始化TList对象,如`MyVCL = new TList;` - 在析构函数中删除TList对象,以释放内存,如`delete MyVCL;` 2. **向控件数组中添加控件** - 在控件的创建事件(如FormCreate)...

    java8从list集合中取出某一属性的值的集合案例

    在上面的代码中,我们首先创建了一个List集合,并添加了三个订单对象。然后,我们使用流式编程从List集合中取出订单号的集合。`map`方法将每个订单对象转换为其订单号,`collect`方法将转换后的结果收集到一个列表中...

    java8 stream 由一个list转化成另一个list案例

    在上面的代码中,我们使用 Stream().forEach() 方法来循环处理 List,并将每个元素打印出来。 2. 利用 Stream().map() 处理 List,并给另外一个 List 赋值 ```java List&lt;String&gt; list1 = Lists.newArrayList(); ...

    对象数组例题.zip

    这个"对象数组例题"可能包含各种场景,比如创建多态对象数组,处理空数组,使用接口,以及在实际问题中应用对象数组等。通过这些练习,你不仅可以掌握对象数组的基础,还能深入理解Java内存管理和面向对象编程的概念...

    ListCtrl - button

    在这个特定的场景中,我们关注的是如何在MFC的ListCtrl控件中每行内嵌入并显示button。ListCtrl是一个非常灵活的控件,通常用于展示列表式的数据,而添加button则可以增加交互性,允许用户对每一项数据执行特定的...

    java 简单实例 list实现bubble sort

    在Java中,我们可以用`for`循环实现这一点,并结合List的`get()`和`set()`方法来访问和修改元素。 以下是一个简化的示例代码片段,演示了如何使用Java List实现冒泡排序: ```java import java.util.ArrayList; ...

    VS(C#)中List用法.docx

    创建一个 `List&lt;T&gt;` 对象,需要指定泛型参数 `T`,表示列表中元素的类型。例如,创建一个存储字符串的 `List&lt;string&gt;`: ```csharp List&lt;string&gt; mList = new List(); ``` 2. **初始化**: 你可以通过一个现有...

    用JSF1.2实现迭代,循环标签(还是组件?)

    在给定的标题和描述中,提到的是如何在JSF 1.2环境下使用类似Struts的迭代和循环功能,结合Ajax技术增强用户体验。 首先,JSF 1.2提供了 `&lt;ui:repeat&gt;` 标签,它是用来替代JSP中的 `&lt;c:forEach&gt;` 标签进行循环遍历...

    C#_List用法详解

    判断某个元素是否在该List中:List.Contains(T item)返回true或false,很实用,例如:if (mList.Contains("Hunter")) { Console.WriteLine("There is Hunter in the list"); } else { mList.Add("Hunter"); } List...

    c#面向对象编程-通讯录全功能

    在这个"通讯录全功能"项目中,`MailList`可能是用于存储和管理邮件列表的类或文件名。它可能包含了读取、写入、添加和删除邮件地址的功能。如果`MailList`是一个类,那么它可能包含字段或属性来存储邮件地址,并提供...

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

    本文将详细介绍如何在C#的数据实体类中为属性赋值,特别是当从数据库中取出的是一个`DataSet`对象时。 #### 实体类定义 首先,我们需要定义一个简单的实体类。在这个例子中,我们定义了一个名为`Class1`的实体类,...

Global site tag (gtag.js) - Google Analytics