`

通用equals方法

    博客分类:
  • java
阅读更多

1.1 equals方法

覆盖equals方法必须遵守的约定:

1、自反性

x.equals(x)必须返回true

2、对称性

x.equals(y)的结果与y.equals(x)必须一致

3、传递性

x.equals(y)为true且y.equals(z)为true,则x.equals(z)为true

4、一致性

多次调用equals方法,结果必须一致

5、对于任何非null的引用x,x.equals(null)必须返回false

 

综合以上五个约定,得出了实现高质量equals方法的诀窍:

1、使用==操作符检查是否为这个对象的引用

 

2、使用instanceof操作符检查“参数是否为正确的类型”

 

3、把参数转化成正确的类型

 

4、对于该类中每个关键域,检查参数中的域是否与该对象中对应的域想匹配

 

5、当编写完equals方法后,测试一下五个约定是否都遵守了

 

注意点:

1、覆盖equals时总是要覆盖hashCode方法

 

2、不要企图让equals方法过于智能

 

3.不要讲equals方法中的Object对象替换为其他的类型,这样其实没有覆盖Object.equals,使用@Override注解可以避免这种问题

 

一个标准的equals方法的例子:(判断一个手机号是否相等)

public class PhoneNumber {
	private final short areaCode;
	private final short prefix;
	private final short lineNumber;
	
	public PhoneNumber(short areaCode, short prefix, short lineNumber) {
		this.areaCode = areaCode;
		this.prefix = prefix;
		this.lineNumber = lineNumber;
	}
	
	@Override
	public boolean equals(Object o) {
		if(o == this) {
			return true;
		}
		
		if(!(o instanceof PhoneNumber)) {
			return false;
		}
		
		PhoneNumber number = (PhoneNumber)o;
		
		return number.lineNumber == lineNumber &&
				number.prefix == prefix &&
				number.areaCode == areaCode;
	}
}

 

分享到:
评论

相关推荐

    方法重写equals和多态

    总结,"方法重写equals"是为了比较对象的内容,而"多态"则是面向对象编程中的重要特性,允许我们以一种通用的方式处理不同类型的对象。在实际项目中,这两个概念常常结合使用,以实现灵活且可扩展的代码设计。

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    重写equals方法需要遵守以下几个通用约定: 1. 自省性:对于非null的x,存在x.equals(x)返回true。 2. 对称性:对于非null的x和y,存在x.equals(y)==y.equals(x)。 3. 传递性:对于非null的x、y、z,存在当x.equals...

    通用的Java常见方法

    ### 通用的Java常见方法详解 #### 字符串操作 在Java编程中,字符串操作是极为常见的需求之一,以下列举了几个重要的字符串方法: 1. **获取字符串的长度:** - `length()`:返回字符串中字符的数量。 2. **...

    Java中Equals使用方法汇总

    重写`equals`方法时,应遵循以下通用约定: 1. **自反性**:对于任何对象`x`,`x.equals(x)`应返回`true`。 2. **对称性**:如果`y.equals(x)`返回`true`,那么`x.equals(y)`也应该返回`true`。 3. **传递性**:...

    java中equals和==的区别.pdf

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常用来比较对象的...同时,为了确保其他自定义类的`equals()`方法正确实现,应遵循通用约定,即同时重写`equals()`和`hashCode()`方法,以保持一致性和正确性。

    C#操作XML通用方法汇总

    本文将重点介绍几个C#中操作XML的通用方法,帮助开发者理解和掌握XML处理的基本技巧。 首先,我们来看如何创建XML文档。在C#中,可以使用`XmlDocument`类来创建XML文档。以下是一个创建XML文档的示例方法: ```...

    注意对象的通用方法,类的设计陷阱.pdf

    对象的通用方法通常指的是所有对象都可以调用的方法,如`toString()`、`equals()`、`hashCode()`等。这些方法定义在`java.lang.Object`类中,是所有Java类的超类。了解并正确使用这些通用方法对于编写高质量的Java...

    DataSet 转化为List的通用方法

    ### DataSet 转化为 List 的通用方法:深入解析与应用 在 IT 领域,数据处理是一项核心任务,特别是在数据库操作与数据展现层之间,数据格式的转换显得尤为重要。其中,`DataSet`到`List`的转换是常见的需求之一,...

    详解hashCode()和equals()的本质区别和联系

    在重写 equals() 方法时,需要遵守通用约定,包括: 1. 自反性:对于任意的引用值 x,x.equals(x) 一定为 true。 2. 对称性:对于任意的引用值 x 和 y,当 x.equals(y) 返回 true 时,y.equals(x) 也一定返回 true...

    学习Object类——为什么要重写equeals和hashcode方法

    此外,Object 类的设计是为了扩展,它提供了一些非 final 方法,如 equals、hashCode、toString、clone 和 finalize,这些方法都有通用的约定,需要在子类中被覆盖(override)。如果不遵守这些约定,依赖这些约定的...

    java集合与通用集合

    `equals(Object o)`方法是Java中的一个核心方法,用于判断两个对象是否相等。在集合中,这个方法被用来比较集合元素是否相同。如果元素实现了`Comparable`接口,可以通过`equals`方法比较大小,而`Comparable`接口...

    前台和后台查找页面上所有控件的通用方法

    ### 前台和后台查找页面上所有控件的通用方法 #### 一、引言 在Web开发中,为了动态地操作网页上的各种控件(如文本框、按钮等),通常需要一种能够遍历页面上所有控件的方法。本文将详细介绍两种不同的技术来实现...

    C# oracle通用类

    #region 公有方法 public void JoinTransaction(Transaction transaction) { if (this._transaction != null) { throw new Exception("对象已经在另一个事务中"); } else { this._transaction = ...

    JSP+Oracle简便通用的表单数据存储处理方法文章出处

    ### JSP+Oracle简便通用的表单数据存储处理方法 #### 概述 在现代Web应用开发中,Java Server Pages (JSP) 和 Oracle 数据库是两种常用的开发技术和数据库管理系统。JSP 提供了动态网页的功能,而 Oracle 则提供了...

    xml解析读取通用类

    if ("element".equals(qName)) { String attrValue = attributes.getValue("attr"); System.out.println("Element found with attribute value: " + attrValue); } } // 其他方法省略... } public class ...

    高效Java 第三部分,经典的国外教材

    本文将重点介绍 `equals()` 方法的正确实现方式及其通用约定。 #### 二、`equals()` 方法的通用约定及重要性 **1. 自反性(Reflexive)** - 对于任意的引用值 `x`,`x.equals(x)` 必须返回 `true`。 - 这意味着一...

    C#期末模拟试卷含有答案

    本资源是一个C#期末模拟试卷,包含多个选择题和填空题,涵盖了C#语言的多个方面,包括.NET Framework、程序集、构造函数、索引器、隐式转换、Equals方法、泛型类等。下面是对每个知识点的详细解释: 1. 关于.NET 的...

    java文件上传、删除、下载的通用方法总结.pdf

    if ("image/pjpeg".equals(type) || "image/x-png".equals(type) || "image/gif".equals(type)) { // 实际文件保存逻辑 String targetDirectory = ServletActionContext.getServletContext().getRealPath("") + ...

    C#查找列表中所有重复出现元素的方法

    这里使用了泛型,使得这个方法可以应用于任何实现了`Equals`方法的对象类型。 方法内部创建了一个新的`List<T>`对象`duplicates`来存储找到的重复元素。然后,通过一个for循环遍历列表,使用索引`i`访问当前元素。...

Global site tag (gtag.js) - Google Analytics