当前位置: 首页 > 面试题库 >

Java中==,equals和hashcode的示例

富涛
2023-03-14
问题内容

鉴于这种:

String s1= new String("abc");
String s2= new String("abc");
String s3 ="abc";
System.out.println(s1==s3);
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());

输出为:

false
false
true
true
96354
96354
96354

==是为每个对象提供false,但每个String对象的哈希码都相同。为什么会这样呢?


问题答案:

==确实比较 对象的 真实相等性(我的意思是-两个引用都指向同一个对象),而不是它们的内容,而.equal比较内容(至少对于String)。

String a = new String("aa");
String b = new String("aa");

ab指向不同的对象。

还要注意,如果对象相等,则它们的哈希必须相同,但是如果哈希码相同,则并不意味着对象相等。



 类似资料:
  • 问题内容: Bert Bates和Kathy Sierra的SCJP 6学习指南在第554页中指出(除其他要求外) x.hashCode()!= y.hashCode()要求x.equals(y)== false 。 但是Javadoc for Object并未明确提及此类要求。Quote: 如果根据equals(Object)方法,两个对象相等,则在两个对象中的每个对象上调用hashCode方法

  • 问题内容: 因此,我有一个带有一堆需要实现的方法的接口,这些方法的名称无关紧要。 实现此接口的对象通常放入集合中,并且具有我希望它们使用的特殊toString()格式。 因此,我认为将hashCode(),equals()和toString()放入接口将很方便,以确保我记得重写这些默认方法。但是,当我将这些方法添加到接口中时,即使没有明确实现这三个方法,IDE / Compiler也不会抱怨,即使

  • 本文向大家介绍java集合——Java中的equals和hashCode方法详解,包括了java集合——Java中的equals和hashCode方法详解的使用技巧和注意事项,需要的朋友参考一下 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用。 equals()

  • 问题内容: 我在很多地方读到说 Java中的覆盖方法时,也应该覆盖方法,否则就是“违反合同”。 但是到目前为止,如果我仅覆盖equals方法,而不覆盖hashCode方法,则不会遇到任何问题。 什么合同 为何我在违反合同时没有遇到任何问题?如果没有重写hashCode方法,在哪种情况下会遇到问题? 问题答案: 你将遇到的问题是集合,其中元素的唯一性是根据和计算的,例如。 顾名思义,它依赖于哈希表,

  • 问题内容: 这里已经有一些 关于JPA实体的讨论,以及对于JPA实体类应该使用哪种hashCode()/ equals()实现。它们中的大多数(如果不是全部)都依赖于Hibernate,但是我想中立地讨论它们(通过顺便说一下,我正在使用EclipseLink)。 在以下方面,所有可能的实现都有各自的优点和缺点: hashCode()/equals()合同一致性(不变性)为List/ Set操作 是

  • 问题内容: and方法必须一致,这意味着当两个对象根据方法相等时,它们的方法应返回相同的哈希值。 如果我们不重写hashCode()方法,则Java将返回唯一的哈希码。 为什么取消注释该行会导致编译错误? 如果对象的哈希码不相等,即使默认哈希码有所不同,为什么它们显示为相等? 问题答案: 平等仅由方法equals()确定。并且hashCode()方法可用于其他情况,例如Map或Set。实际调用eq