新手学习中。
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
很是郁闷,谢谢大家

解决方案 »

  1.   


    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
      

  2.   

    //改成这样--楼主对对象句柄还搞不很清楚
    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));
    }
      

  3.   

    如果像楼主那样,其实你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));
    }
      

  4.   

    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()
      

  5.   

    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
    你自己在机器上测试通过?
      

  6.   

    System.out.println("vECTROs get name = " + user.getName());
    楼主粗心了,应该是user2.getName()