public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakHashMap ws = new WeakHashMap();
// {
// String lu = new String("sb");
// ws.put(lu, "Afka Liu");
// }
initHash(ws);
System.gc();
System.out.println(ws.get("sb"));
}
public static void initHash(WeakHashMap<String, String> ws) {
String lu = new String("sb");
ws.put(lu, "Afka Liu");
}
}
打印出来的值是 null
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakHashMap ws = new WeakHashMap();
{
String lu = new String("sb");
ws.put(lu, "Afka Liu");
}
// initHash(ws);
System.gc();
System.out.println(ws.get("sb"));
}
public static void initHash(WeakHashMap ws) {
String lu = new String("sb");
ws.put(lu, "Afka Liu");
}
}
打印出来的值是Afka Liu
这个例子先new了一个String,这样就没有常量池的引用指向这个new出来的String对象,然后将它put到WeekHashMap中,如果没有lu的强引用,WeekHashMap中get出来的就应该是null。但是第二种方法get出来的不是null,但是lu已经出了作用域,生命周期也已经结束。第一种和第二种在垃圾回收上有什么区别?
[b]问题补充:[/b]
你说的我清楚,我也只是建议回收,可是在我的eclipse里跑了几十次都是我提问的结果,如果能得到您给的结果,那就没有什么问题了.