在此代碼中,我聲明瞭一個Initialized String變量,然後打印其哈希碼,然後將其重新初始化爲另一個值,然後調用垃圾收集器清除解除引用的對象。Java中String類的垃圾回收
但是,當我將字符串變量重新初始化爲其原始值並打印哈希碼時,將打印相同的哈希碼。怎麼樣?
public class TestGarbage1 {
public static void main(String args[]) {
String m = "JAVA";
System.out.println(m.hashCode());
m = "java";
System.gc();
System.out.println(m.hashCode());
m = "JAVA";
System.out.println(m.hashCode());
}
}
儘管Object的哈希碼是從其內存地址派生而來的,但String的哈希碼是從它的值派生而來的。 –
儘管@ Elogent的評論,你有問*的GC,但一個不一定已經運行。 –
即使GC在您調用'System.gc()'的行上立即發生,'m'仍然指向'「JAVA」',因此不會收集實例。 –