String
上的小程序 String str1 = new String("Hello");
String str2 = "Hello";
System.out.println("=======================");
System.out.println("Srtr1 == Str2 :: " + (str1 == str2));
System.out.println("Srtr1.equals(Str2) :: " + str1.equals(str2));
输出: Srtr1 == Str2 :: false Srtr1.equals(Str2):: true
现在怎么可能?我们知道如果两个对象的equals()为真,那么两个对象的HashCode()必须为true。但是如果HashCode()为true,则Equals()可能为true或者可能不为true。
但是在上面的程序中,我们看到,两个String对象的equals()为true,但是它们的hashCode()返回false。
为什么会如此?
答案 0 :(得分:1)
你根本没有比较hashCode()。你在比较平等和身份。
两个字符串的标识是不同的,因为您已经看到为每个字符串分配了新对象。身份比较'=='返回false。
两个字符串的值是相同的,因此equals()方法返回true。
答案 1 :(得分:0)
==运算符将验证指向每个String的指针是否指向同一个对象,在这种情况下它们不是。这与对象的hashCode()非常不同,后者返回该对象内数据的整数哈希值。要验证这一点,您应该替换
System.out.println("Srtr1 == Str2 :: " + (str1 == str2));
通过
System.out.println("Srtr1.hashCode() == Str2.hashCode() :: "
+ (str1.hashCode() == str2.hashCode()));
这将证明你的两个字符串的hashCode确实相等:)