日期:2014-05-20  浏览次数:20583 次

ArrayList小问题
看看这样写结果
ArrayList treeList = new ArrayList();
ArrayList syList = new ArrayList();

treeList=syList;

我想问 这样之后 syList中的值是否会把treeList中的值给覆盖掉


想好再说 别让我搞笑了 我自己感觉是可以的呵呵

------解决方案--------------------
你的理解有错误:new开辟了2个内存空间,分别存储内容;treeList和syList分别指向相应的内容空间(及‘引用’的概念);重新赋值后,treeList指向了syList的内存地址,所以,当遍历气内容时,就是syList中的内容。java里面的垃圾回收机制会在合适的时候回收你不使用的内存。
------解决方案--------------------
在一般情况下
Object a = new Object();
Object b = new Object();

b = a; //这个时候 b原来指向的对象如果没有其他的引用标识会被JVM垃圾清理机制清理掉,而不是你所说的被覆盖,只是单纯的a指向了b原来指向的对象而已

你要知道a和b不代表对象,只是一个指向对象的标示符号

打个比方,你有一张到成都的火车票,这张火车票并不代表成都

b = a这个操作就好像把你手中的火车票的目的地从成都改成了北京

而北京和成都都就在那里,和你手中的火车票指向哪里没有关系

但是如果没有一个人的火车票是到北京的,那JVM就认为这个玩意已经没有意义可以被清理了