这仍然是WeakReference吗



我正在创建一个WeakReference并将其保存在某个位置。

WeakReference<MySpecialObject> mWeakReference = new WeakReference<MySpecialObject>(new MySpecialObject("My","Special","Data"));

但其他一些外部库(我不知道它在做什么)确实需要MySpecialObject实例。当我使用下面类似的东西时:

ExternalLibraryThingy#useItWisely(mWeakReference.get()); 

第1部分结束

过了一段时间我会打电话给

ExternalLibraryThingy#doSomethingUsefull(); //which I dont know it kept a reference while calling "useItWisely" method.

第2部分结束

问题

在第1部分结束之前,我在本地创建的MySpecialObject对象是否仍被弱引用?我的意思是,如果我打电话给mWeakReference.get(),有机会得到null吗?换句话说,操作系统可以随意进行垃圾收集吗?

直到第2部分结束,如果ExternalLibraryThingyuseItWisely时进行和赋值,并在doSomethingUsefull时使用该赋值,它能抛出NullPointerException吗?

我想一个简单的答案可以同时回答这两个问题。提前谢谢。

您将取消引用的对象传递给ExternalLibraryThingy#useItWisely方法。外部库不关心您是否从弱引用中检索到对象。

因此,该对象在外部库中是否具有强引用完全取决于您对其调用的方法。如果不知道该方法的作用,就不可能知道该对象是否仍将被引用。

至于你的第二个问题,图书馆直接有MySpecialObject参考资料。从外部库的角度来看,它不会被null随机替换。

相关内容

  • 没有找到相关文章

最新更新