我想了解弱引用弱引用和困惑,我看到在維基以下代碼:關於Java的
import java.lang.ref.WeakReference;
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakReference r = new WeakReference(new String("I'm here"));
WeakReference sr = new WeakReference("I'm here");
System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
System.gc();
Thread.sleep(100);
// only r.get() becomes null
System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());
}
}
可能有人請告訴我,爲什麼只有R變爲零,即使它保持很強的參考(新字符串)?
我所知道的是弱引用不被垃圾收集,而強大的引用避免。既然如此,我不明白爲什麼r變成空而sr不是 – attaboy182 2014-11-06 00:27:28
如果我的理論是正確的,存儲在sr中的字符串存儲在字符串池中,因爲它是使用字符串文字創建的。存儲在r中的字符串不是,因爲它是使用'new'關鍵字創建的。由於字符串「sr」仍然在字符串池中引用,因此它被認爲是強烈引用的(這是純粹的理論;沒有親自挖掘) – 2014-11-06 00:32:03