【问题标题】:Getting unexpected result with == operator in java在 Java 中使用 == 运算符获得意外结果
【发布时间】: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() - 反之则不然。
  • namesnames2 是不同的对象。 names2.add(2,"Spongebob"); 不会修改 names。你会期待吗?为什么?
  • @shmosel,== 运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。 (根据link
  • @ElliottFrisch,我们可以说 == 只能用于比较相同的对象吗?

标签: java


【解决方案1】:

来自hashCode()的官方文档:

这是不是要求如果根据 equals 方法两个对象不相等,则对这两个对象中的每一个调用 hashCode 方法必须产生不同的整数结果。

如果 equals 不需要它,那么 == 就不需要它。

【讨论】:

  • 虽然我同意 Java 文档,但这是否意味着我所做的比较不正确?
  • 取决于您要实现的目标。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多