使用文字或新方法创建的所有字符串的哈希值均相同

时间:2018-07-18 14:35:35

标签: java string

我用字符串文字创建了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

2 个答案:

答案 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