我有时会假设如果oldObject != newObject
对象发生了变化——在大多数情况下这似乎是一个公平的假设,但它真的是一个糟糕的假设吗?
简而言之,以下代码在什么情况下会打印“Same!”?
static WeakReference<Object> oldO = null;
...
Object o = new Object();
oldO = new WeakReference(o);
// Do some stuff with o - could take hours or even days to complete.
...
// Discard o (or let it go out of scope).
o = null;
// More stuff - could be hours or days later.
...
o = new Object();
// Later still.
if ( o == oldO.get() ) {
System.out.println("Same!");
}
我意识到这确实是远程可能的,因为对象引用本质上是对象的内存地址(或者可能在某些 JVM 中)。但可能性有多大?我们是在谈论它实际发生之前的几十年运行时间吗?
添加
我很抱歉 - 请假设这oldO
是某种形式的weak
参考,不会阻止它被收集。也许Weak
就像代码(现在)所建议的那样,或者参考存储在数据库或某处的文件中。