arraylist中add方法,我写的方法返回值是arrylist,但是发现arraylist最后获取的都是同一个对象
伪代码如下:
public ArrayList getuser(){
ArrayList arrayList=new ArrayList();
user u=new user();//自己写的类
while(条件){
u=获取用户;
arrayl.add(u);
}
return arraylist;
}
结果发现arraylist都是最后一个user。
最后更改了一下user的创建位置,就arralist返回就有多个user了。
如下
public ArrayList getuser(){
ArrayList arrayList=new ArrayList();
while(条件){
user u=new user();//自己写的类
u=获取用户;
arrayl.add(u);
}
return arraylist;
}
能解释下原因吗,user在while循环里面获得信息,直接加入到arrayl中,为什么实例化也要在while中啊
user 如果在while外实例化,始终只有一个user 对象,
User u = new User();中栈内存中始芹兆睁终只有一个变量u,无论这个u接收了多少个user对象,这个u只能指向一嫌岁个堆内存中的user实例对象,所以只有一个。猜嫌
在JAVA中每一个new就是为一个对象分配内存空间,如果在while外只生成一个对象的话,那么怎么改变的都早缺只是这个对象的内存地址的引用(有点像C++中的传址调用)。而add方法中不会做对象的clone(克隆后的对象会在不同的内存区域段存虚睁早放),所以你第一中写法差雀最后返回的List中肯定全是最后一个被更新的对象。
类宏斗册似c的作用域,条件的u只是一个引用,不管你条件怎么样,引用都指向一个对象蔽宏,
如果你在while里面实例销猜化,条件每成立一次,就新生成一个引用