等于(equals)和java中的hashcode(hashcode in java)的区别

equals类似于==运算符,它用于测试对象标识而不是对象相等性。hashCode是一种方法,类通过该方法隐式或显式地将存储在类实例中的数据分解为单个哈希值,该散列值是一个32位有符号整数。在Java中,equals和hashCode之间的关键区别在于equals用于比较两个对象,而hashCode用于散列,以决定对象应归入哪个组。...

关键区别–在java中等于与哈希代码

equals类似于==运算符,它用于测试对象标识而不是对象相等性。hashCode是一种方法,类通过该方法隐式或显式地将存储在类实例中的数据分解为单个哈希值,该散列值是一个32位有符号整数。在Java中,equals和hashCode之间的关键区别在于equals用于比较两个对象,而hashCode用于散列,以决定对象应归入哪个组。

目录

1. 概述和主要区别
2. 在Java中什么是相等的
3. 什么是Java中的hashCode
4. 并排比较——用表格形式表示的Java中的equals与hashCode
5. 摘要

什么是在java中等于(equals in java)?

equals方法用于比较两个对象。默认的equals方法在对象类中定义。该实现类似于==运算符。两个对象引用只有在指向同一对象时才相等。可以重写equals方法。

等于(equals)和java中的hashcode(hashcode in java)的区别

图01:Java程序与equals

声明System.out.println(s1.equals(s2))将给出错误的答案,因为s1和s2指的是两个不同的对象。与声明相似,System.out.println(s1==s2);

声明System.out.println(s1.equals(s3))将给出正确的答案,因为s1和s3引用的是同一个对象。与声明相似,System.out.println(s1==s3);

学生班没有平等的方法。因此,对象类中的equals被调用。只有当对象引用指向同一对象时,才会显示True。

等于(equals)和java中的hashcode(hashcode in java)的区别

图02:重写equals的Java程序

根据上述程序,将重写equals方法。将一个对象传递给方法,并将其类型强制转换为Student。然后,检查id值。如果id值相似,则返回true。否则,它将返回false。s1和s2的id相似。所以,它会印出真的。s1和s3的id也很相似,因此它将打印为true。

什么是java中的hashcode(hashcode in java)?

哈希代码用于散列,以决定对象应归入哪个组。一组对象可以共享相同的哈希代码。正确的哈希函数可以将对象均匀地分布到不同的组中。

正确的哈希代码可以具有如下属性。假设有两个对象obj1和obj2。如果obj1.equals(obj2)为真,那么obj1.hashCode()等于obj2.hashCode()。如果obj1.equals(obj2)为false,则不必obj1.hashCode()不等于obj2.hashCode()。两个不相等的对象也可能具有相同的哈希代码。

等于(equals)和java中的hashcode(hashcode in java)的区别

图03:带有equals和hashCode的Student类

等于(equals)和java中的hashcode(hashcode in java)的区别

图04:主程序

Student类包含equals和hashCode方法。Student类中的equals方法将接收一个对象。如果对象为null,则返回false。如果对象的类不相同,则返回false。在两个对象中都会检查id值。如果它们相似,则返回true。否则将返回false。

在主程序中,创建对象s1和s2。当调用s1.equals(s2)时,将给出true,因为equals方法被重写,它检查两个对象的id值。即使它们引用的是两个对象,但答案是正确的,因为s1和s2的id值是相同的。由于s1.equals(s2)为真,s1和s2的hashCode应该相等。打印s1和s2的hashCode得到相同的值。hashCode方法可用于HashMap等集合。

等于(equals)和java中的hashcode(hashcode in java)的区别

等于Java中的hashCode
equals是Java中的一个方法,它的作用类似于==运算符,后者用于测试对象标识而不是对象相等性。 hashCode是一种方法,类通过该方法隐式或显式地将存储在类实例中的数据分解为单个哈希值。
使用
equals方法用于比较两个对象。 该方法用于散列,以确定应将对象放入哪个组中。

总结 - 等于(equals) vs. java中的hashcode(hashcode in java)

在Java中equals和hashCode的区别在于,equals用于比较两个对象,而hashCode用于散列,以决定对象应归入哪个组。

引用

  • 发表于 2020-10-19 00:40
  • 阅读 ( 203 )
  • 分类:IT

你可能感兴趣的文章

扔(throw)和抛出java(throws in java)的区别

...记小于50,将导致异常并显示“失败”。如果标记大于或等于50,它将打印消息“通过”。 什么是抛出java(throws in java)? throws关键字用于声明异常。后面是异常类名。e、 g.–抛出异常。程序员可以使用throws关键字声明多个异常。...

  • 发布于 2020-09-21 19:02
  • 阅读 ( 360 )

包裹(package)和java接口(interface in java)的区别

Java中的Package和Interface的主要区别在于,Package有助于对类进行有条理的分类以方便访问和维护,而Interface则有助于实现多个继承和实现抽象。 Java是最流行的编程语言之一。Java的主要优点是它支持面向对象编程。这种方法允...

  • 发布于 2020-10-18 11:01
  • 阅读 ( 579 )

包装类(wrapper class)和java中的基元类型(primitive type in java)的区别

关键区别——java中的包装类与原语类型 Java是一种流行的编程语言,用于开发各种应用程序。Java的一个优点是它支持面向对象编程(OOP)。使用OOP,可以使用对象对程序或软件进行建模。类被用作创建对象的蓝图。有必要在...

  • 发布于 2020-10-19 06:27
  • 阅读 ( 744 )

静止的(static)和java期末考试(final in java)的区别

关键区别——java中的静态与最终版本 每种编程语言都有特定的语法。程序员在编写程序时应该遵循这些语法。程序设计语言的关键字根据任务的不同具有特定的含义。它们由编程语言提供,不能用于用户定义的变量、方法、...

  • 发布于 2020-10-19 07:48
  • 阅读 ( 320 )

选中的(checked)和java中的未检查异常(unchecked exception in java)的区别

关键区别——java中的检查异常与未检查异常 异常是运行时错误。有两种类型的异常称为检查异常和未检查异常。当发生选中的异常时,Java应用程序连接到外部资源,如文件、设备或数据库。这些异常由编译器检查。检查的...

  • 发布于 2020-10-19 08:38
  • 阅读 ( 284 )

变量(variables)和java中的数据字面值(data literals in java)的区别

关键区别——java中的变量与数据文本 计算机程序是执行一项任务的一组指令。编程时需要存储数据。因此,这些数据被存储在存储器中。这些保留的内存位置称为变量。变量应该有唯一的名称,因为它们应该易于识别以执行...

  • 发布于 2020-10-19 08:52
  • 阅读 ( 261 )

超载(overloading)和在java中重写(overriding in java)的区别

...别——java中重载与重写 面向对象编程(OOP)是软件开发中的一个主要范式。它是一种使用类和对象设计程序的方法。班级就是蓝图。它描述了对象中应该包含的内容。或者应该定义对象的属性。因此,对象是类的实例。这些对...

  • 发布于 2020-10-19 21:20
  • 阅读 ( 368 )

聚合(aggregation)和java中的合成(composition in java)的区别

聚合(aggregation)和java中的合成(composition in java)的区别 聚合是描述“has-a”关系的两个对象之间的关联。组合是一种更具体的聚合类型,它意味着所有权。Java中聚合和组合的关键区别在于,如果包含的对象可以在没有拥有对象...

  • 发布于 2020-10-24 01:38
  • 阅读 ( 726 )

抽象类(abstract class)和java接口(interface in java)的区别

...法。好吧,因为Java8,接口也有方法实现,它们可以有Java中的静态和默认方法。让我们详细研究一下两者的区别。 什么是java中的抽象类(an abstract class in java)? Java中的抽象类是一个声明为抽象的类——它可能包含也可能不包含...

  • 发布于 2021-06-25 03:52
  • 阅读 ( 307 )

散列表(hashmap)和哈希表(hashtable)的区别

...的值。哈希表通过哈希函数将键映射到值。Java以对象的hashcode()方法的形式提供这个函数,类重写该方法以提供适当的hash代码。与HashMap不同,Hashtable不支持null值和null键,因为Hashtable的put方法实现中存在null检查。   hashmap和...

  • 发布于 2021-06-25 20:14
  • 阅读 ( 253 )
sorrybat
sorrybat

0 篇文章

相关推荐