为什么WeakReference仍然返回Object的值?

时间:2016-05-01 20:06:11

标签: android weak-references

我想知道如何在开发Android应用程序时使用WeakReference。因为我在互联网上搜索了很多,我输入了这段代码:

   {
        String kk = "Test";
        WeakReference<String> kkRef = new WeakReference<String>(kk);
        System.out.println(kk);
        System.out.println(kkRef.get());
        kk = null;
        System.gc();
        System.out.println(kk);
        System.out.println(kkRef.get());
   }

假设kk对象符合GC的条件,但在控制台输出中,似乎kkRef.get()仍然返回应该返回"Test"的{​​{1}}值当我读到null

那么为什么它没有返回weakReference

1 个答案:

答案 0 :(得分:2)

首先,System.gc()不一定执行完整的垃圾收集运行,并且无法保证它将同步执行。因此,无法保证检测到所有弱持物体。

其次,字符串仍然保持强烈,因为它是代码中的字符串文字。这不能被垃圾收集,所以WeakReference仍然会返回文字。