gpt4 book ai didi

java - Java中String类的垃圾回收

转载 作者:行者123 更新时间:2023-12-01 16:54:04 25 4
gpt4 key购买 nike

在此代码中,我声明了一个初始化字符串变量,然后打印其哈希码,然后将其重新初始化为另一个值,然后调用垃圾收集器来清除取消引用的对象。

但是当我将 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());
}
}

最佳答案

哈希码与对象相等性相关,而不是与身份相关。

a.equals(b) implies a.hashCode() == b.hashCode()

(前提是两种方法的实现一致)

即使这里实际上发生了GC(并且您不是简单地引用常量池中的字符串),您也不会期望具有相同字符序列的两个字符串实例不相等 - 因此,它们的哈希值代码也将是相同的。

String a = new String("whatever");
String b = new String(a);
System.out.println(a == b); // false, they are not the same instance
System.out.println(a.equals(b)); // true, they represent the same string
System.out.println(a.hashCode() == b.hashCode()); // true, they represent the same string

关于java - Java中String类的垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com