今天做到从数据库中取出数据然后存入实体类的对象,然后将对象放到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存储引用类型注意的问题相关推荐

  1. 值类型和引用类型在栈和堆中的分配

      类型基础及背后的工作原理   数据在内存中的分配与传递    值类型和引用类型它们在内存分配与传递上的区别 内存分配 首先要了解一下内存中栈和堆的概念.     栈(Stack) ##栈是一种先进 ...

  2. [转载]实际举例C#引用类型和值类型的区别

    http://www.cnblogs.com/coolbeibei/archive/2009/03/23/1419706.html 实际举例C#引用类型和值类型的区别 我们都知道,c#的两大数据类型分 ...

  3. Windows Phone 开发起步之旅之二 C#中的值类型和引用类型

    今天和大家分享下本人也说不清楚的一个C#基础知识,我说不清楚,所以我才想把它总结一下,以帮助我自己理解这个知识上的盲点,顺便也和同我一样不是很清楚的人一起学习下.  一说起来C#中的数据类型有哪些,大 ...

  4. 【转】堆栈和托管堆 c#

    原文地址:http://blog.csdn.net/baoxuetianxia/archive/2008/11/04/3218913.aspx 首先堆栈和堆(托管堆)都在进程的虚拟内存中.(在32位处 ...

  5. java程序设计_Java程序设计:学习笔记(4-5)(未完工)

    声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...

  6. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  7. Java 学习笔记(4)——java 常见类

    上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法.其实Java相比于C来说强大的另一个原因是Java中提供 ...

  8. tuple(元组)备注

    tuple(元组)备注 元组是能够容纳元素集合的对象.每个元素可以是不同的类型. c++ 标准库 tuple::operator= tuple::swap swap (tuple) get (tupl ...

  9. .Net IL代码研究

    参考文章:http://www.cnblogs.com/zery/p/3366175.html 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的 ...

最新文章

  1. python2.7 mysql mock_Python中Mock的示例
  2. Android 虚线实现绘制 - DashPathEffect
  3. golang 调用库函数错误 cannot refer to unexported name
  4. 转PHP5+APACHE2.2配置
  5. //BASE64解码成File文件
  6. 体验MySQL MMM
  7. Spring常问的面试
  8. Android中WebService的应用
  9. 生成core文件的步骤
  10. IntelliJ IDEA 面板、菜单介绍
  11. SQLite快速入门
  12. 你会用JSON.stringify()?
  13. 无聊开始玩路由器,入门Tomato固件
  14. ubuntu18.04安装有道词典等常用软件
  15. 证券公司信息化1-证券行业的本质是什么?什么是资本市场?什么又是一级市场和二级市场?
  16. 数字证书颁发及认证原理
  17. 1083 Cantor表
  18. 退耦电容原理--退藕电容的一般配置原则
  19. flash builder_使用Flash Builder进行数据驱动的开发,第二部分
  20. JQuery 控制 radio 只读

热门文章

  1. Windows Azure Mobile Services增加了对 Android的支持并扩展其适用范围至东亚地区
  2. HTML5 Canvas 基础API和实例
  3. ASP.NET配置文件Web.config
  4. 云原生微服务技术趋势解读
  5. (一)深入浅出图解Git,入门到精通(保姆级教程)
  6. 数据库锁机制为什么很重要?
  7. 如何在分布式场景下生成全局唯一 ID ?
  8. Serverless特点及应用
  9. 缓存雪崩缓存击穿缓存穿透的本质
  10. C++赋值运算符与赋值表达式