java吧 关注:1,286,671贴子:12,811,381

【求教】一个关于ArrayList的问题

只看楼主收藏回复

我在观看一段java源代码时遇到了一个问题。
该段程序代码较为简单,大意为:用for循环生成了若干个对象(引用类型),每次循环 都往 一个实例变量Arraylist中add该对象。
debug该程序时,我发现该arraylist中成功被添加了相应数量的对象。
我的问题是:arraylist存储对象时应该只是存储对象的引用吧?但是随着每次循环的结束,该对象的生存期不也同时结束了么,那通过arraylist访问其子元素(对象的引用)不是应该找不到其对象本身了么?
新手求教,对ArrayList的存储方式不太了解


IP属地:四川1楼2014-09-10 15:32回复


    2楼2014-09-10 16:09
    回复
      2025-11-09 19:33:40
      广告
      不感兴趣
      开通SVIP免广告
      怎么会有这种想法


      3楼2014-09-10 16:27
      回复
        既然被别人持有了你的引用你觉得还会消亡吗?就像你在类之间传递一样,出了类就没了?那还怎么传递?


        IP属地:广东来自手机贴吧4楼2014-09-10 16:38
        收起回复
          既然ArrayList持有该对象的引用 怎么会被GC呢
          你想这么弄 可以考虑弱引用和虚引用


          5楼2014-09-10 16:43
          收起回复
            在堆内存中,只要柞内存有引用指向他,就不会被回收


            IP属地:福建来自iPhone客户端7楼2014-09-10 17:52
            收起回复
              除非你的arraylist=null,过段时间里面的内容应该可以被回收了


              IP属地:江苏来自iPhone客户端8楼2014-09-10 18:03
              回复
                楼上说的哈子


                来自Android客户端9楼2014-09-10 18:35
                回复
                  2025-11-09 19:27:40
                  广告
                  不感兴趣
                  开通SVIP免广告
                  arraylist都持有对象的引用了,对象怎么会被gc,又不是值传递。


                  IP属地:江苏来自Android客户端10楼2014-09-10 18:41
                  收起回复
                    这不是c java里只要用应用指着就不会没的


                    11楼2014-09-10 19:17
                    回复
                      同样的小白 我也解释一下,不过可能不清楚。
                      每创建一个对象 都会分配一个新的内存地址 你把这个对象存入List集合中 for循环结束的时候 仍然有引用在指向这个地址 这个时候是不会垃圾回收的 所以这个对象仍然存在


                      12楼2014-09-10 20:00
                      收起回复
                        你说的离开for循环 循环里定义的句柄的确是没用了啊,外面是获取不到的。但是arraylist里面保存的是对象的地址啊,用地址去取对象怎么会取不出来呢。


                        13楼2014-09-10 21:26
                        收起回复
                          楼主,你不能认为for循环一退出new出来的对象就被回收了吧?不能啊,有引用在,gc是回收不了的,退一步说,即使回收,gc也不是你for循环退出的时候执行啊。


                          14楼2014-09-10 21:30
                          收起回复
                            你以为你创建一样名字的引用,编译之后的引用名字就一样么…


                            来自iPhone客户端15楼2014-09-10 21:33
                            回复