考虑下一个 fragment :
private void foo() {
A a = new A();
WeakReference<A> weakA = new WeakReference<A>(a);
a = null;
while (true) {
if (weakA.get() != null)
System.out.println("weakA.get() != null !!!");
else
System.out.println("weakA.get() == null");
}
}
'if' 语句还必须包含对 'weakA' 对象(WeakReference 对象)的空值检查吗?像这样:
if (weakA != null && weakA.get() != null)
或者在这种情况下只是一个多余的检查?我问这个是因为我看过很多检查 WeakReference 是否不为 null 的代码和教程,我不确定是否是因为当持有的引用对象被 GC 时,VM 会删除 WeakReference 本身。
提前致谢。
编辑:
您可以在本教程中查看此模式的空检查示例: http://android-developers.blogspot.com.ar/2010/07/multithreading-for-performance.html
但我也在 Multithreading For Performance 中找到了它.在这种情况下,它会在 AsyncTask.onPostExecute() 方法中检查 WeakReference 是否为 null,但它不会明确地为 WeakReference 对象赋值,所以我猜检查 WeakReference 本身是否为 null 是多余的。
最佳答案
不,weakA
本身不能为 null
,只要您仍然持有对它的引用。它只是可以收集的对象。
您可以发布您提到的代码示例吗?
关于java - WeakReference 对象是否也与引用对象一起被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353246/