list存储引用类型注意的问题
今天做到从数据库中取出数据然后存入实体类的对象,然后将对象放到list集合中,后来发现取出来的数据全是一样的
这个是我的程序代码:
public List<IdAndName> getAllIdandName(String sql) throws Exception{Course course=new Course();List<Course> list=new ArrayList<Course>();list=getList(sql);IdAndName idName=new IdAndName();List<IdAndName> ls=new ArrayList<>();for(int i=0;i<list.size();i++){idName.setId(list.get(i).getId());idName.setName(list.get(i).getCourseName());System.out.println(idName.toString());ls.add(idName);}return ls;}
在什么面的代码中我希望是返回一个list,里面存着的对象是不同的,但是发现list中的对象全部都是相同的,问题在循环里面,循环中每一次我都是更新对象idName的id和name属性,以为这样存进去的就是不同的对象,但是我没有想到的是list存对象的时候,是存入的对象的在堆中的内存地址,虽然我每次都更新这个idName对象的属性值,但是存到最后,还是只存进了一个对象。
在输出结果中我们可以看到:
com.entity.IdAndName@25a56154
com.entity.IdAndName@25a56154
com.entity.IdAndName@25a56154
com.entity.IdAndName@25a56154
在堆中是一样的,那么我们怎样来解决这样的问题,获取到不同的对象,这个就是需要我们每次存入的不是同一个对象,我们将new放入循环的内部就可以解决了
如下:
public List<IdAndName> getAllIdandName(String sql) throws Exception{Course course=new Course();List<Course> list=new ArrayList<Course>();list=getList(sql);List<IdAndName> ls=new ArrayList<>();for(int i=0;i<list.size();i++){IdAndName idName=new IdAndName();idName.setId(list.get(i).getId());idName.setName(list.get(i).getCourseName());System.out.println(idName.toString());ls.add(idName);}return ls;}
最后输出结果:
com.entity.IdAndName@124b943a
com.entity.IdAndName@1141b3a1
com.entity.IdAndName@2eb14c88
com.entity.IdAndName@476b9ef1
这样ls每次存入的就是不同的对象,取出来的时候自然也不同,这个很基础,但是平时也容易忽略,想知道更多可以去百度找引用的数据类型的存储问题。
希望对你有所帮助。
list存储引用类型注意的问题相关推荐
- 值类型和引用类型在栈和堆中的分配
类型基础及背后的工作原理 数据在内存中的分配与传递 值类型和引用类型它们在内存分配与传递上的区别 内存分配 首先要了解一下内存中栈和堆的概念. 栈(Stack) ##栈是一种先进 ...
- [转载]实际举例C#引用类型和值类型的区别
http://www.cnblogs.com/coolbeibei/archive/2009/03/23/1419706.html 实际举例C#引用类型和值类型的区别 我们都知道,c#的两大数据类型分 ...
- Windows Phone 开发起步之旅之二 C#中的值类型和引用类型
今天和大家分享下本人也说不清楚的一个C#基础知识,我说不清楚,所以我才想把它总结一下,以帮助我自己理解这个知识上的盲点,顺便也和同我一样不是很清楚的人一起学习下. 一说起来C#中的数据类型有哪些,大 ...
- 【转】堆栈和托管堆 c#
原文地址:http://blog.csdn.net/baoxuetianxia/archive/2008/11/04/3218913.aspx 首先堆栈和堆(托管堆)都在进程的虚拟内存中.(在32位处 ...
- java程序设计_Java程序设计:学习笔记(4-5)(未完工)
声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...
- 《JavaScript面向对象精要》读书笔记
JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...
- Java 学习笔记(4)——java 常见类
上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法.其实Java相比于C来说强大的另一个原因是Java中提供 ...
- tuple(元组)备注
tuple(元组)备注 元组是能够容纳元素集合的对象.每个元素可以是不同的类型. c++ 标准库 tuple::operator= tuple::swap swap (tuple) get (tupl ...
- .Net IL代码研究
参考文章:http://www.cnblogs.com/zery/p/3366175.html 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的 ...
最新文章
- python2.7 mysql mock_Python中Mock的示例
- Android 虚线实现绘制 - DashPathEffect
- golang 调用库函数错误 cannot refer to unexported name
- 转PHP5+APACHE2.2配置
- //BASE64解码成File文件
- 体验MySQL MMM
- Spring常问的面试
- Android中WebService的应用
- 生成core文件的步骤
- IntelliJ IDEA 面板、菜单介绍
- SQLite快速入门
- 你会用JSON.stringify()?
- 无聊开始玩路由器,入门Tomato固件
- ubuntu18.04安装有道词典等常用软件
- 证券公司信息化1-证券行业的本质是什么?什么是资本市场?什么又是一级市场和二级市场?
- 数字证书颁发及认证原理
- 1083 Cantor表
- 退耦电容原理--退藕电容的一般配置原则
- flash builder_使用Flash Builder进行数据驱动的开发,第二部分
- JQuery 控制 radio 只读