• 欢迎访问梯云博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站点击访问
  • 站点的评论回复邮件可能会被邮箱放入垃圾邮件中,请注意哦~
  • 梯云博客近期增设了“电影资源”板块,在视频区域下边哦~
  • 梯云音乐上线,提供一站式的音乐下载平台,点击前往梯云音乐
  • 如果百度网盘下载速度过慢,可使用该工具~Proxyee-down 百度网盘不限速
  • 本站所有发布的信息以及产品,仅供学习研究使用;除有软件所有者授权外不得非法用于商业或其他用途。
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏梯云吧!

常被错用的 ArrayList add 方法

JSP 做棵大树 2年前 (2017-12-21) 246次浏览 0个评论

今天在做项目的时候,用了 ArrayList 数组,然后发现 ArrayList 的内容居然一样。原来 Add 方法不恰当使用会覆盖前一个内容的值。在这里记录一下。

错误的做法 ##

             ArrayList alist = new ArrayList();
             Software software = new Software();  
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			//读取信息并存入 software 对象数组
			while (rs.next()) {
				
				software.setSimage(rs.getString("simage"));
				software.setSname(rs.getString("sname"));
				software.setSsize(rs.getInt("ssize"));
				software.setSdesc(rs.getString("sdesc"));
				software.setSdate(rs.getDate("sdate"));
				software.setSoftware(rs.getString("software"));
				alist.add(software);
			}
			return alist;

以上做法循环了之后发现 ArrayList 的内容一样。因为新加入的 software 会覆盖上一个 software,不希望这样的话,必须把实例化的过程Software software = new Software(); 放进 f 循环中去。

正确的做法 ##

ArrayList alist = new ArrayList();
		
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			//读取信息并存入 software 对象数组
			while (rs.next()) {
				Software software = new Software();  //防止 ArrayList 的 add 方法产生覆盖
				software.setSimage(rs.getString("simage"));
				software.setSname(rs.getString("sname"));
				software.setSsize(rs.getInt("ssize"));
				software.setSdesc(rs.getString("sdesc"));
				software.setSdate(rs.getDate("sdate"));
				software.setSoftware(rs.getString("software"));
				alist.add(software);
			}
			return alist;

原因:
其实 add 加进去的是对象的一个引用,对象实例化放在循环外面,你每次都更新了这个引用的值,当然 list 里面的值都一样的。如果把(Software software = new Software(); //防止 ArrayList 的 add 方法产生覆盖)放到循环里面,每次都生成一个新的对象,更改自身不会对其他元素有影响….


TeenShare 梯云分享 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明常被错用的 ArrayList add 方法
喜欢 (1)
[欢迎投币]
分享 (0)
关于作者:
一个整天无所事事的,有时候忽然热血的孩子
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址