【发布时间】:2022-11-25 11:02:05
【问题描述】:
我在一个类的主要方法中有以下代码
Map<Integer, String> names = new HashMap<>();
Map<Integer, String> names2 = new HashMap<>();
names.put(1,"Pratik");
names2.put(1,"Pratik");
System.out.println(names.equals(names2));
System.out.println(names.hashCode());
System.out.println(names2.hashCode());
System.out.println(names == names2);
当我运行代码时,输出如下:
真的 -1896349258 -1896349258 错误的
问题是如果 hashcode 为两个对象返回相同的值,那么为什么 ( names == names2 ) 返回 false ?
期望通过 == 进行的比较对于具有相同哈希码值的对象来说是正确的。
【问题讨论】:
-
期望通过 == 进行的比较对于具有相同哈希码值的对象来说是正确的。你为什么会这样?
-
x == y暗示x.equals(y)暗示x.hashCode() == y.hashCode()- 反之则不然。 -
names和names2是不同的对象。names2.add(2,"Spongebob");不会修改names。你会期待吗?为什么? -
@shmosel,== 运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。 (根据link
-
@ElliottFrisch,我们可以说 == 只能用于比较相同的对象吗?
标签: java