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方法需要遵守以下几个通用约定: 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编程中,字符串操作是极为常见的需求之一,以下列举了几个重要的字符串方法: 1. **获取字符串的长度:** - `length()`:返回字符串中字符的数量。 2. **...
重写`equals`方法时,应遵循以下通用约定: 1. **自反性**:对于任何对象`x`,`x.equals(x)`应返回`true`。 2. **对称性**:如果`y.equals(x)`返回`true`,那么`x.equals(y)`也应该返回`true`。 3. **传递性**:...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常用来比较对象的...同时,为了确保其他自定义类的`equals()`方法正确实现,应遵循通用约定,即同时重写`equals()`和`hashCode()`方法,以保持一致性和正确性。
本文将重点介绍几个C#中操作XML的通用方法,帮助开发者理解和掌握XML处理的基本技巧。 首先,我们来看如何创建XML文档。在C#中,可以使用`XmlDocument`类来创建XML文档。以下是一个创建XML文档的示例方法: ```...
对象的通用方法通常指的是所有对象都可以调用的方法,如`toString()`、`equals()`、`hashCode()`等。这些方法定义在`java.lang.Object`类中,是所有Java类的超类。了解并正确使用这些通用方法对于编写高质量的Java...
### DataSet 转化为 List 的通用方法:深入解析与应用 在 IT 领域,数据处理是一项核心任务,特别是在数据库操作与数据展现层之间,数据格式的转换显得尤为重要。其中,`DataSet`到`List`的转换是常见的需求之一,...
在重写 equals() 方法时,需要遵守通用约定,包括: 1. 自反性:对于任意的引用值 x,x.equals(x) 一定为 true。 2. 对称性:对于任意的引用值 x 和 y,当 x.equals(y) 返回 true 时,y.equals(x) 也一定返回 true...
此外,Object 类的设计是为了扩展,它提供了一些非 final 方法,如 equals、hashCode、toString、clone 和 finalize,这些方法都有通用的约定,需要在子类中被覆盖(override)。如果不遵守这些约定,依赖这些约定的...
`equals(Object o)`方法是Java中的一个核心方法,用于判断两个对象是否相等。在集合中,这个方法被用来比较集合元素是否相同。如果元素实现了`Comparable`接口,可以通过`equals`方法比较大小,而`Comparable`接口...
### 前台和后台查找页面上所有控件的通用方法 #### 一、引言 在Web开发中,为了动态地操作网页上的各种控件(如文本框、按钮等),通常需要一种能够遍历页面上所有控件的方法。本文将详细介绍两种不同的技术来实现...
#region 公有方法 public void JoinTransaction(Transaction transaction) { if (this._transaction != null) { throw new Exception("对象已经在另一个事务中"); } else { this._transaction = ...
### JSP+Oracle简便通用的表单数据存储处理方法 #### 概述 在现代Web应用开发中,Java Server Pages (JSP) 和 Oracle 数据库是两种常用的开发技术和数据库管理系统。JSP 提供了动态网页的功能,而 Oracle 则提供了...
if ("element".equals(qName)) { String attrValue = attributes.getValue("attr"); System.out.println("Element found with attribute value: " + attrValue); } } // 其他方法省略... } public class ...
本文将重点介绍 `equals()` 方法的正确实现方式及其通用约定。 #### 二、`equals()` 方法的通用约定及重要性 **1. 自反性(Reflexive)** - 对于任意的引用值 `x`,`x.equals(x)` 必须返回 `true`。 - 这意味着一...
本资源是一个C#期末模拟试卷,包含多个选择题和填空题,涵盖了C#语言的多个方面,包括.NET Framework、程序集、构造函数、索引器、隐式转换、Equals方法、泛型类等。下面是对每个知识点的详细解释: 1. 关于.NET 的...
if ("image/pjpeg".equals(type) || "image/x-png".equals(type) || "image/gif".equals(type)) { // 实际文件保存逻辑 String targetDirectory = ServletActionContext.getServletContext().getRealPath("") + ...
这里使用了泛型,使得这个方法可以应用于任何实现了`Equals`方法的对象类型。 方法内部创建了一个新的`List<T>`对象`duplicates`来存储找到的重复元素。然后,通过一个for循环遍历列表,使用索引`i`访问当前元素。...