webwork下 ArrayList的问题

nhk166 2006-03-23 10:44:02
新手学习中。。。。
public class TESTACTION implements Action{
private ArrayList privileges;
private User user;
private User user2;
public ArrayList getPrivileges() {
return privileges;
}

/**
* @see com.opensymphony.xwork.Action#execute()
*/
public String execute() throws Exception
{
privileges = new ArrayList();
for(int i=0;i<=1;i++){
user = new User();
user.setId("id"+i);
user.setName("nhk"+i);
System.out.println("vECTROs set name " + user.getName());
System.out.println(privileges.add(user));
}
for(int i=0;i<privileges.size();i ++){
user2 = new User();
user2 = (User)privileges.get(i);
System.out.println("vECTROs get name = " + user.getName());
}
return Action.SUCCESS;
}
}
为什么在第一个循环中每次向ArrayList中添加一个USER对象(只具备name与id属性),添加完毕后从ArraryList中取时 得到的USER对象都是一样的 ?后台打印出来的信息如下:
vECTROs set name nhk0
true
vECTROs set name nhk1
true
vECTROs get name = nhk1
vECTROs get name = nhk1
很是郁闷,谢谢大家
...全文
134 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lilijr 2006-03-23
privilege.add(new User(user));
回复
nhk166 2006-03-23
to:黑哥
不知道究竟是改 “List privileges = new ArrayList();//改成这样” 还是 “User user = new User();//改成这样” ,
如果把“List privileges = new ArrayList();//改成这样”加在循环里时,那么每次都是NEW了一个ArrayList 对象,那么它的SIZE永远只能为1;
如果“User user = new User();“如
ArrayList privilege = new ArrayList();
for(int i=0;i<=1;i++){
User user = new User();
user.setId("id"+i);
user.setName("nhk"+i);
System.out.println(i + "^^^^^^^^^" + user.getName());
privilege.add(user);
}
System.out.println("privilege.size---" + privilege.size());
for(int i=0;i<privilege.size();i ++){
User user2 = new User();
user2 = (User)privilege.get(i);
System.out.println(i+"---------" + user2.getName());
}

打印效果 0^^^^^^^^^nhk0
1^^^^^^^^^nhk1
privilege.size---2
0---------nhk1
1---------nhk1
你自己在机器上测试通过?
回复
lydvqq 2006-03-23
for(int i=0;i<privileges.size();i ++){
user2 = new User();
user2 = (User)privileges.get(i);
System.out.println("vECTROs get name = " + user.getName()+":"+user);
}
对不起刚才看快了。因上楼主粗心user2 = new User();而后面是user.getName()
回复
hagedon 2006-03-23
回复
lydvqq 2006-03-23
如果像楼主那样,其实你ArrayList放在全是同一个对象,你可以打印下每个对象的地址。
//改成这样--楼主对对象句柄还搞不很清楚

上面的写快了,不好意思
for(int i=0;i<=1;i++){

User user = new User();//改成这样
user.setId("id"+i);
user.setName("nhk"+i);
System.out.println("vECTROs set name " + user.getName());
System.out.println(privileges.add(user));
}
回复
lydvqq 2006-03-23
//改成这样--楼主对对象句柄还搞不很清楚
for(int i=0;i<=1;i++){
List privileges = new ArrayList();//改成这样
user = new User();
user.setId("id"+i);
user.setName("nhk"+i);
System.out.println("vECTROs set name " + user.getName());
System.out.println(privileges.add(user));
}
回复
lydvqq 2006-03-23

for(int i=0;i<=1;i++){
privileges = new ArrayList();
user = new User();
user.setId("id"+i);
user.setName("nhk"+i);
System.out.println("vECTROs set name " + user.getName());
System.out
回复
wangx1949 2006-03-23
System.out.println("vECTROs get name = " + user.getName());
楼主粗心了,应该是user2.getName()
回复
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-03-23 10:44
社区公告
暂无公告