在此代码中,我声明了一个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”',因此不会收集实例。 –