请看下面的2个例子:
String a = new String("hello");
String b = new String("hello");
System.out.println("a.hashCode() - " + a.hashCode());
System.out.println("b.hashCode() - " + b.hashCode());
System.out.println("a == b - " + (a == b));
System.out.println("a.equals(b) - " + (a.equals(b)));
结果:
a.hashCode() - 99162322
b.hashCode() - 99162322
a == b - false
a.equals(b) - true
如果我理解正确,我有 2 个不同的对象,因为单词new创建对象。但是我们看到hashCode是一样的,这意味着我错了。如果 hashCode 相同,我明白为什么a.equals(b)
是True。
但是此代码的输出:
int [] a = {1, 2, 3};
int [] b = {1, 2, 3};
System.out.println("a.hashCode() - " + a.hashCode());
System.out.println("b.hashCode() - " + b.hashCode());
System.out.println("a == b - " + (a == b));
System.out.println("a.equals(b) - " + (a.equals(b)));
是不同的:
a.hashCode() - 1627674070
b.hashCode() - 1360875712
a == b - false
a.equals(b) - false
现在我们有两个不同的对象,因为hashCode是不同的,这就是为什么两个条件都是False(应该是这样)。
感觉我需要填补知识空白,并会感谢任何指导。
提前致谢!