有一个list,有内容,比如size是2
有个bean,中有个信息是setlist。大概如下:
bean.setlist()--list有内容
list.clear()--清空list
bean.getlist()--没有内容了。如果往bean中set其他的值,都没有问题,这是为什么啊?

解决方案 »

  1.   

    bean.setlist()--list有内容
    list=new ArrayList()--重新new一个
    bean.getlist()--有内容
    这样就没问题了,我想知道为什么呢?
      

  2.   

    我的理解:第一个,list.clear(),应该是把当前的list清空,所以拿不到内容,而第二个,重新new一个list,就不关以前的事了,以前的那个list还在,那个bean还是用的以前那个list吧。
      

  3.   

    先明白
    list对象是一个引用类型的对象,具体 
     bean.setlist() 的意思就是把list 的引用付值给bean 中的某个元素
     list.clear() 将该引用所对应的list真正的对象清空
     bean.getlist()因为引用所指向的对象被清空了所以list就没有直了
    而你第二次做了个list=new ArrayList()
    list所对的引用指向了另外一个list 所以bean.getlist()还在
     
      

  4.   

    bean.setlist(list);
    与你后面的list.clear();
    引用的是同一个对象,
    不要以为bean.setlist(list);是将list复制一个扔到bean里。
    当你new的时候,是重新引用了一个新的对象,原来的对象只有拿到句柄的才能调用到了,也就是bean.getlist();
      

  5.   

    谢谢 wawqhzbz(wawqhzbz)与ltandfyy(cache)
    这个样子的话我就理解了。但是bean不在使用后是否能够正常的被垃圾收集器回收呢?系统是一直在运行的,怕内存溢出。
      

  6.   

    超出作用域就会,还有一些没有句柄的,比如直接new一个对象没接,应该是这样。
    只是回收的时机不确定,但会被回收的,内存是应该考虑,但如果在回收之前,内存都不够的话,就是有问题了,可能系统是有点问题,比如静态内存区需求过大,一直占用,等等,还有别的一些情况,另外就是虚拟内存大小的设置,都应该考虑。
      

  7.   

    Java方法是以引用形式传递的。lz的情况就是list和bean中的list指向的是同一对象,只是两个引用不同而已,就像是A a= new A(); A b =a;一样;所以当一方操纵对象的时候,由于是同一指向,另一方的内容也会变