我用字符串文字创建了3个字符串2,并使用new创建了一个字符串。但是,当我为它们打印哈希码时,它会给出相同的哈希码。我很困惑,因为它如何返回相同的哈希码。请在下面找到示例。
public class StringTest
{
public static void main(String[] args)
{
String str = "abc";
String str1 = "hfdjkfhs";
System.out.println("hashValue str:::" + str1.getClass().hashCode());
System.out.println("hashValue str:::" + str.getClass().hashCode());
String str2 = new String("def");
System.out.println("hashValue:::" + str2.getClass().hashCode());
}
}
输出:-
hashValue str1 ::: 366712642
hashValue str ::: 366712642
hashValue str2 ::: 366712642
答案 0 :(得分:6)
您正在打印String
类的哈希码,而不是已创建的String
对象的哈希码。
代替:
str.getClass().hashCode()
您应该具有:
str.hashCode()
答案 1 :(得分:2)
您正在使用:
Object.getClass()
返回类对象,然后获取该对象的哈希码。这称为反射。由于每个实例的类对象都相同,因此您将获得相同的哈希码。
您可能想要每个已经引用的实例的哈希码,因此请使用:
str.hashCode();
str1.hashCode();
str2.hashCode();
更多信息:https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html