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
很是郁闷,谢谢大家
...全文
167 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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()

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧