在重写equals方法之前,首先要了解为什么要重写equals方法,以及关于重写equals方法的相关约定。
一.为什么要重写equals方法呢?
Object类是Java中所有类的基类,Object类中的equals方法用与检测一个对象是否等于另一个对象。如果两个引用指向一个同一个对象,则equals返回true,否则返回false;Object中equals方法实际是比较两个对象的内存地址是否相等。
Object类中equals方法定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
而在实际应用过程中,我们并不关心对象的内存地址,往往需要比较两个对象实际状态,所以需要重写equals方法。
二.重写equals方法的相关约定
1 自反性:对于任意的引用值x,x.equals(x)一定为true。
2 对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true。
3 传递性:对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返回 true。
4 一致性:对于任意的引用值x 和 y,如果用于equals比较的对象信息没有被修改,多次调用x.equals(y)要么一致地返回true,要么一致地返回false。
5 非空性:对于任意的非空引用值x,x.equals(null)一定返回false。
三.重写equals方法
在重写equals方法时,最好要重写hashcode方法,否则两个相等的对象,hashcode可能不相等。如定义个People类,如果People类的属性name、age值相等,则认为两个People类的实力相等,在People类中重写equals方法。
@Override
public boolean equals(Object obj) {
if(this == obj){ //先判断是否是同一个对象
return true;
}
if(obj == null){ //如果对象为null,返回false
return false;
}
//判断两个对象是否属于同一个类
if(!(obj instanceof People)){
return false;
}
//把obj对象转为具体的对象类型,比较状态是否相等。
People p = (People)obj;
if((p.getName().equals(this.getName()))
&& (p.getAge() == this.getAge())){
return true;
}
return false;
}
小结:
重写分为4步:
1.比较是否是同一个对象;
2.判断对象是否为null;
3.把要比较的对象从Object转为具体的类型;
4.比较对象中的相关的属性是否相等;
分享到:
相关推荐
在 Java 中,equals 方法是一个非常重要的方法,它用于判断两个对象是否相等,而不是判断两个对象的引用是否相同。在 Object 基类中,equals 方法的实现是使用“==”操作符来比较对象的引用,但是这并不满足实际需求...
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
关于 Java 中重写 equals 方法的种种坑 Java 中的 equals 方法是一种用于比较对象是否相等的方法,它是 Object 类中的一个方法。然而,重写 equals 方法并不是一件简单的事情,因为它需要遵守一些约定,否则可能会...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...
#### 二、为什么需要重写equals方法? 1. **提高程序效率**:当两个对象具有相同的业务逻辑上的“身份”时,它们应该被认为是相等的。 2. **增强代码可读性**:重写后的`equals`方法可以根据实际需求来判断对象是否...
Java 中重写 equals() 方法的同时要重写 hashCode() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...
Java 对象的toString和equals方法重写 在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象...
总的来说,理解并正确地重写 `equals()` 和 `hashCode()` 方法是Java编程中的基础技能,它有助于确保对象的比较和集合操作的正确性。在开发过程中,要时刻注意这两个方法的正确实现,以提高代码质量和可维护性。
"Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object类中的方法。在实际开发中,正确地重写这两个方法对于确保程序的正确性和性能至关重要。下面,我们将...
为什么重写equals方法,还必须要重写hashcode方法
在重写equals方法时,我们需要遵守Java规范中对equals方法的约束,包括自反性、对称性、传递性、一致性和null处理。 自反性:对于任何非空引用x,x.equals(x)返回true。 对称性:对于任何引用x、y,当且仅当y....
在Java编程语言中,"方法重写equals"和"多态"是两个核心概念,尤其对于面向对象的设计和实现至关重要。下面将详细解释这两个概念及其相互关系。 **方法重写equals()** 在Java中,`equals()`方法是Object类的一个...
在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...
在Java编程语言中,`equals()` 和 `hashCode()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...
* 如果没有重写equals()方法的类,需要重写该方法来实现对象内容的比较。 * 在equals()方法中,需要比较对象的成员变量是否相同。 * Java语言中的“==”运算符对于基本数据类型就是比较其值,而对于对象就是比较对象...
在 Java 中,`equals` 和 `hashCode` 方法是 Object 类中的两个重要方法,它们用于比较对象的相等性。默认情况下,`equals` 方法比较的是两个对象的引用,即是否指向内存中的同一个位置,而 `hashCode` 方法则返回...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象身份验证和哈希表操作的关键组成部分。当我们在自定义类中重写 `equals()` 方法时,通常也需要重写 `hashCode()` 方法,这是为了遵循一些重要的原则和保证...
java_equals用法,用来熟悉重写equals方法的
在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...