请看下面两段代码。。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对象,均为跳出循环之前最后一个被修改的对象,即:列表当中的所有对象与最后一个在循环中被修改的对象一模一样。。
这是在编程中非常容易出现的错误。。切记。。