截取代码重要部分
public void testList() {
List<HiBean> list=new ArrayList<HiBean>();
HiBean hiBean;
for (int i = 0; i < 20; i++) {
hiBean = new HiBean();
hiBean.setAge(i);
list.add(hiBean);
}
loopList(list);
}
hibean是一个简单的java值对象.
按照我之前的理解,在这段程序中只存在一个HiBean的引用,也就是hiBean,只是在循环中每次指向了不同的对象实例,最后加入到list中的所有hiBean引用都是同一个也指向的是一个对象实例,结果就应该输出全都为19.
但是最后程序运行结果是输出0至19。
麻烦各位看看什么地方理解有误,谢谢
public void testList() {
List<HiBean> list=new ArrayList<HiBean>();
HiBean hiBean;
for (int i = 0; i < 20; i++) {
hiBean = new HiBean();
hiBean.setAge(i);
list.add(hiBean);
}
loopList(list);
}
hibean是一个简单的java值对象.
按照我之前的理解,在这段程序中只存在一个HiBean的引用,也就是hiBean,只是在循环中每次指向了不同的对象实例,最后加入到list中的所有hiBean引用都是同一个也指向的是一个对象实例,结果就应该输出全都为19.
但是最后程序运行结果是输出0至19。
麻烦各位看看什么地方理解有误,谢谢
容器存储的是引用,也就是你给list存储的时候是把这个引用的拷贝存储,这样就很明朗了吧~
拷贝出来的引用和之前的引用是指向同一个对象,但是第二次循环的时候这个引用指向了另一个对象,这显然不影响第一次拷贝后的引用!
public void testList() {
List <HiBean> list=new ArrayList <HiBean>();
for (int i = 0; i < 20; i++) {
HiBean hiBean = new HiBean();
hiBean.setAge(i);
list.add(hiBean);
}
loopList(list);
}
public void testList() {
List <HiBean> list=new ArrayList <HiBean>();
HiBean hiBean = new HiBean();
for (int i = 0; i < 20; i++) {
hiBean.setAge(i);
list.add(hiBean);
}
loopList(list);
} 这个是你想要地...