Android 为什么WeakReference仍然返回对象';s值多少?

Android 为什么WeakReference仍然返回对象';s值多少?,android,weak-references,Android,Weak References,我想知道如何在开发android应用程序时使用WeakReference。因此,当我在互联网上搜索了很多东西时,我键入了以下代码: { String kk = "Test"; WeakReference<String> kkRef = new WeakReference<String>(kk); System.out.println(kk); System.out.println(kkRef.get()

我想知道如何在开发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=“测试”;
WeakReference kkRef=新的WeakReference(kk);
系统输出打印LN(kk);
System.out.println(kkRef.get());
kk=null;
gc();
系统输出打印LN(kk);
System.out.println(kkRef.get());
}
假设将
kk
对象限定为
GC
,但在控制台输出中,
kkRef.get()
似乎仍然返回
“Test”
值,该值在我读到
weakReference
时应返回
null

那么为什么它不返回
null

首先,
System.gc()
不一定执行完整的垃圾收集运行,而且也不能保证它会同步执行。因此,不能保证检测所有弱保持对象

其次,字符串仍然是强保持的,因为它在代码中是字符串文本。它永远不会被垃圾收集,因此对它的
WeakReference
仍将返回文本。

首先,
System.gc()
不一定执行完整的垃圾收集运行,并且不能保证它会同步执行。因此,不能保证检测所有弱保持对象


其次,字符串仍然是强保持的,因为它在代码中是字符串文本。它永远不能被垃圾收集,因此对它的
WeakReference
仍然会返回文本。

但是我键入了
kk=null
,删除了强reference@MohamedFadelBuffon:您删除了该强引用。字符串文本仍然存在于代码中。在Java中,赋值(
String kk=“Test”
)不会复制对象。无法对字符串文本进行垃圾收集。尝试使用您使用
new
关键字自己创建的对象的实例。非常感谢,它对我有用:)。但是你能告诉我你所说的“文字”是什么意思吗。。谢谢你advance@MohamedFadelBuffon:Java中的文字是任何基本值(
5
3.14159f
true
)或
字符串(
“测试”
)直接输入Java代码。但是我键入了
kk=null
,删除了reference@MohamedFadelBuffon:您删除了该强引用。字符串文本仍然存在于代码中。在Java中,赋值(
String kk=“Test”
)不会复制对象。无法对字符串文本进行垃圾收集。尝试使用您使用
new
关键字自己创建的对象的实例。非常感谢,它对我有用:)。但是你能告诉我你所说的“文字”是什么意思吗。。谢谢你advance@MohamedFadelBuffon:Java中的文字是直接输入Java代码的任何基本值(
5
3.14159f
true
)或
字符串(
“Test”
)。