您的位置:首页 > 其它

解析向集合中放相同名称的对象,但是每次对象的值不同时候,遍历集合时候的结果

2016-07-07 13:50 309 查看
先写一个对象,这里列出部分代码

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);
}


总的来说就是,向相同地址的集合里放不同地址的对象,这样的才是正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string 对象 遍历