Java 这仍然是懦弱的参照物吗?
我正在创建一个Java 这仍然是懦弱的参照物吗?,java,android,weak-references,Java,Android,Weak References,我正在创建一个WeakReference,并将其保存在某个地方 WeakReference<MySpecialObject> mWeakReference = new WeakReference<MySpecialObject>(new MySpecialObject("My","Special","Data")); 第1部分结束 过了一段时间,我确实打过电话 ExternalLibraryThingy#doSomethingUsefull(); //which I d
WeakReference
,并将其保存在某个地方
WeakReference<MySpecialObject> mWeakReference = new WeakReference<MySpecialObject>(new MySpecialObject("My","Special","Data"));
第1部分结束
过了一段时间,我确实打过电话
ExternalLibraryThingy#doSomethingUsefull(); //which I dont know it kept a reference while calling "useItWisely" method.
第2部分结束
问题:
在第#1部分结束之前,我的在位创建的MySpecialObject
对象是否仍处于弱引用状态?我的意思是,如果我调用mWeakReference.get()
,是否有可能得到null
?换句话说,操作系统垃圾可以随意收集吗
在第#2部分结束之前,如果在使用时进行了外部库内容
赋值
,并且在dosomethingusullel
时使用该赋值,它是否会抛出空点异常
我想一个简单的答案可以回答这两个问题。提前感谢。您将解除引用的对象传递给了外部librarythingy#useiitwise
方法。外部库并不关心您是否从弱引用检索了对象
因此,对象在外部库中是否具有强引用完全取决于对其调用的方法。如果不知道该方法的作用,就不可能知道该对象是否仍将被引用
至于你的第二个问题,这个库直接引用了MySpecialObject
。从外部库的角度来看,它不会被随机替换为null
,因此假设外部库Thingy保留了一个强引用;只要它保持不变,mWeakReference.get()
就不会返回null,对吗?
ExternalLibraryThingy#doSomethingUsefull(); //which I dont know it kept a reference while calling "useItWisely" method.