`
小牧童
  • 浏览: 8945 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java中重写equals方法

阅读更多
    在重写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.比较对象中的相关的属性是否相等;
分享到:
评论

相关推荐

    重写equals方法

    在 Java 中,equals 方法是一个非常重要的方法,它用于判断两个对象是否相等,而不是判断两个对象的引用是否相同。在 Object 基类中,equals 方法的实现是使用“==”操作符来比较对象的引用,但是这并不满足实际需求...

    Java重写equals同时需要重写hashCode的代码说明

    Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.

    浅谈java 重写equals方法的种种坑

    关于 Java 中重写 equals 方法的种种坑 Java 中的 equals 方法是一种用于比较对象是否相等的方法,它是 Object 类中的一个方法。然而,重写 equals 方法并不是一件简单的事情,因为它需要遵守一些约定,否则可能会...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    equals方法的重写.docx

    #### 二、为什么需要重写equals方法? 1. **提高程序效率**:当两个对象具有相同的业务逻辑上的“身份”时,它们应该被认为是相等的。 2. **增强代码可读性**:重写后的`equals`方法可以根据实际需求来判断对象是否...

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    Java 中重写 equals() 方法的同时要重写 hashCode() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...

    重写toString和equals方法

    Java 对象的toString和equals方法重写 在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    总的来说,理解并正确地重写 `equals()` 和 `hashCode()` 方法是Java编程中的基础技能,它有助于确保对象的比较和集合操作的正确性。在开发过程中,要时刻注意这两个方法的正确实现,以提高代码质量和可维护性。

    Java重写equals及hashcode方法流程解析

    "Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object类中的方法。在实际开发中,正确地重写这两个方法对于确保程序的正确性和性能至关重要。下面,我们将...

    为什么重写equals方法,还必须要重写hashcode方法

    为什么重写equals方法,还必须要重写hashcode方法

    重写Java中的equals方法介绍

    在重写equals方法时,我们需要遵守Java规范中对equals方法的约束,包括自反性、对称性、传递性、一致性和null处理。 自反性:对于任何非空引用x,x.equals(x)返回true。 对称性:对于任何引用x、y,当且仅当y....

    方法重写equals和多态

    在Java编程语言中,"方法重写equals"和"多态"是两个核心概念,尤其对于面向对象的设计和实现至关重要。下面将详细解释这两个概念及其相互关系。 **方法重写equals()** 在Java中,`equals()`方法是Object类的一个...

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    java中重写equals和重写hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...

    Java中equals()方法重写实现代码

    * 如果没有重写equals()方法的类,需要重写该方法来实现对象内容的比较。 * 在equals()方法中,需要比较对象的成员变量是否相同。 * Java语言中的“==”运算符对于基本数据类型就是比较其值,而对于对象就是比较对象...

    为什么在重写 equals方法的同时必须重写 hashcode方法

    在 Java 中,`equals` 和 `hashCode` 方法是 Object 类中的两个重要方法,它们用于比较对象的相等性。默认情况下,`equals` 方法比较的是两个对象的引用,即是否指向内存中的同一个位置,而 `hashCode` 方法则返回...

    java中为何重写equals时必须重写hashCode方法详解

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象身份验证和哈希表操作的关键组成部分。当我们在自定义类中重写 `equals()` 方法时,通常也需要重写 `hashCode()` 方法,这是为了遵循一些重要的原则和保证...

    java_equals用法

    java_equals用法,用来熟悉重写equals方法的

    Java中的equals和hashCode方法详解1

    在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...

    浅谈Java中的equals和==Java开发Java经验

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...

Global site tag (gtag.js) - Google Analytics