解析向集合中放相同名称的对象,但是每次对象的值不同时候,遍历集合时候的结果
2016-07-07 13:50
309 查看
先写一个对象,这里列出部分代码
打印的结果却是“
为什么,分别两次将学生对象,放到集合中,但是第一次和第二次学生内容不同,但是最后遍历集合,集合里面却都是第二个学生信息呢。
难道是第二次将第一次的学生信息覆盖了吗。
在java中,讲究的指针,或者说地址。有上面可以看出,两个学生信息不同,但是其实却是相同地址的学生,只是人为的第一次放的是第一个学生的信息。第二次方的是第二个学生的信息,但是其实就是同一个学生的容器。而一个学生容器,只能放一个学生信息。
对于集合来说,第一次放的学生信息,的确是id为1的学生信息。第二次是为2的。但是当我们遍历的时候。里面确实是两条记录。
只是里面放的是两个学生容器的id。而两个学生容器id都是test.student@659e0bfd。而上面说了,一个容器,只能放一个学生信息,而学生容器放的就是最后一个学生的信息。因此,打印的时候,都是第二个学生的信息。
因此 应用到项目的时候,应该在外层声明集合。在内部声明对象
总的来说就是,向相同地址的集合里放不同地址的对象,这样的才是正确的。
package test; import java.text.SimpleDateFormat; import java.util.*; public class test{ public static void main(String[] args){ student st=new student(); List <student>list=new ArrayList<student>(); // 第一次放进去对象 st.setId("id为1"); st.setName("第一个对象"); System.out.println(st); list.add(st); //第2次放进去对象student str st.setId("id为2"); st.setName("第二个对象"); list.add(st); System.out.println(st); student str=null; for(int i=0;i<list.size();i++){ str=list.get(i); System.out.println("第"+i+"次"+"==========="+str.getId()+"============"+str.getName()); } } }
打印的结果却是“
test.student@659e0bfd test.student@659e0bfd 第0次===========id为2============第二个对象 第1次===========id为2============第二个对象
为什么,分别两次将学生对象,放到集合中,但是第一次和第二次学生内容不同,但是最后遍历集合,集合里面却都是第二个学生信息呢。
难道是第二次将第一次的学生信息覆盖了吗。
在java中,讲究的指针,或者说地址。有上面可以看出,两个学生信息不同,但是其实却是相同地址的学生,只是人为的第一次放的是第一个学生的信息。第二次方的是第二个学生的信息,但是其实就是同一个学生的容器。而一个学生容器,只能放一个学生信息。
对于集合来说,第一次放的学生信息,的确是id为1的学生信息。第二次是为2的。但是当我们遍历的时候。里面确实是两条记录。
只是里面放的是两个学生容器的id。而两个学生容器id都是test.student@659e0bfd。而上面说了,一个容器,只能放一个学生信息,而学生容器放的就是最后一个学生的信息。因此,打印的时候,都是第二个学生的信息。
因此 应用到项目的时候,应该在外层声明集合。在内部声明对象
student st=null; List <student>list=new ArrayList<student>(); for(int i=0;i<2;i++){ st=new student(); st.setId(""); list.add(st); }
总的来说就是,向相同地址的集合里放不同地址的对象,这样的才是正确的。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- android上改变listView的选中颜色
- String.intern
- 土人系列AS入门教程 -- 对象篇
- 文件遍历排序函数
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- Lua 学习笔记之C API 遍历 Table实现代码
- javascript asp教程第十一课--Application 对象
- PostgreSQL ERROR: invalid escape string 解决办法
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- VBS教程:对象-正则表达式(RegExp)对象
- C#检查指定对象是否存在于ArrayList集合中的方法