List<Role>allRoleList = new ArrayList();
                  Role role = new Role();
                  role.setRoleID(156);
role.setName("系统管理员");
allRoleList.add(role);
role.setRoleID(157);
role.setName("航班信息管理员");
allRoleList.add(role);
role.setRoleID(158);
role.setName("机场设施 管理员");
allRoleList.add(role);
role.setRoleID(159);
role.setName("新闻发布员");
allRoleList.add(role);
role.setRoleID(161);
role.setName("普通用户");
allRoleList.add(role);最后allRoleList里全装的最后设定的role值,为同一个.
平时都是new 一个role,在list里加一个role,今天想节省点内存,就出问题了
请问,出现这个问题的原因是什么呢?请指教!

解决方案 »

  1.   

    这么说吧,你list里要放N个对象,但你仅仅为你想要的效果,创建了1个,
    创建了一个对象(Role),jvm就为他开辟一块堆的位置,无论你怎么改这个堆内的内容,只能得到最后的更改的内容.
    必须为每个对象创建属于他们的堆位置,也就是:
    Role r=new Role();
    这句不可少.
    别忘了给分啊..........
    这属于java内存管理机制...建议看看相关资料...
      

  2.   

    你想这样来节省内存。java的什么?面向对象。你看看你一个集合中到底有几个对象。就一个role对象。可能会出现你想象的多个属性不相同的对象吗?
    要认识到何为面向对象。
      

  3.   

    有时候事情往往是这样,在只知其一,不知其二的情况下,就出现了这样那样的错误。楼上说的够清楚了,我想补充一点的就是list里面保存的是对象的引用。
      

  4.   

    我同学说,因为容器中存的是引用 而不是实际的对象 所以每次更改的都是不同的引用指向的相同对象
    这个java内存管理有关系么?
    你前面说的还有点道理
      

  5.   

    对啊。是引用。引用里面放的是你这个对象的地址。从头到尾你这个地址就只有一个。结果可想而知
    再有: java中内存不用程序员来手动控制的。他有垃圾回收机制,在对象没有引用时,会自动被回收。你这个考虑还是有点多余,
      

  6.   

    List里存的是引用你通过引用修改一个对象的属性,所有引用又都指向这个对象所以,你的List里是一堆相同的对象