public boolean equals(Object o) {
if (o == this) //1.使用==操作符检查“参数是否为这个对象的引用”
return true;
if (!(o instanceof List))//2.使用instanceof操作符检查“参数是否为正确的类型”
return false;
ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();//3.把参数转换成正确的类型
while(e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))//4.对于该类中的每个“关键(significant)”域,检查参数中的域是否与该对象中的对应域相匹配
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
上面的实例代码是AbstactList的equals方法。
《Effective Java》提出的equals方法的通用约定
·自反性:对于任何非null的引用值x,x.equals(x)必须返回true。
·对称性:对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)返回true。
·传递性:对于任何非null的引用值x、y和z,当且仅当y.equals(x)返回true,并且y.equals(z)返回true时,x.equals(z)返回true
·一致性:对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致地返回true,或者一致地返回false
·对于任何非null的引用值x,x.equals(null)必须返回false
实现高质量equals方法的诀窍
1.使用==操作符检查“参数是否为这个对象的引用”
2.使用instanceof操作符检查“参数是否为正确的类型”
3.把参数转换成正确的类型
4.对于该类中的每个“关键(significant)”域,检查参数中的域是否与该对象中的对应域相匹配
5.编写完equals方法后,应该问自己三个问题:它是否是对称的、传递的、一致的
分享到:
相关推荐
以上知识点涵盖了Java编程的多个方面,从基础语法到高级特性,旨在帮助开发者写出更健壮、更易于维护的代码。通过理解和应用这些最佳实践,可以提升代码的可读性、可扩展性和性能,从而降低维护成本,提高团队的工作...
《阿里巴巴Java开发规范》是Java开发者的一份重要指南,它为编写高质量的Java代码提供了全面的规则和建议。这份规范源自阿里巴巴集团内部的实践经验,经过不断优化和完善,已经成为业界广泛认可的标准之一。以下是对...
Java 编程 30 条规则 Java 编程 30 条规则旨在帮助开发者编写高...这 30 条规则对 Java 编程进行了详细的规定,帮助开发者写出高质量的 Java 代码。遵循这些规则,开发者可以写出更加简洁易读、易维护和可靠的代码。
Object类的equals方法默认行为与==相同,但很多类如String重写了equals方法,以比较对象内容而非引用。同时,如果重写了equals,通常也需要重写hashCode方法以保持一致性。 4. 异常处理机制: 异常处理通过try-...
以上只是Java常用方法和概念的一部分,Java API中包含大量实用的功能,熟练掌握它们能够帮助开发者更高效地编写高质量的代码。在学习过程中,不断实践和理解这些方法的使用场景和原理,将有助于提升编程技能。
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,该书的第三版继续提供了关于如何编写高效、...《Effective Java》的每一项条目都是精心挑选的最佳实践,旨在帮助Java开发者写出更高质量的代码。
文档《.NET类库开发的设计准则》详细阐述了如何设计高质量的.NET类库,涵盖了命名准则、类型设计、成员设计、异常处理、使用准则等多个方面。 命名准则是设计高质量类库的基础。在.NET开发中,大小写约定对于提高...
### 写Java程序的三十个规则 ...以上规则不仅有助于编写高质量、可维护的Java代码,还能提升团队协作效率和软件项目的整体质量。遵循这些最佳实践,可以帮助开发者在实践中不断进步,写出更加优雅和高效的代码。
8. **避免巨型对象**:警惕写出大而全的对象,对象应代表应用程序中的概念,而不是整个程序的逻辑。 9. **封装不美观的代码**:将不美观或复杂的代码放在类的内部,提高代码整洁度。 10. **使用内部类**:当类间...
正确理解并运用这些概念可以帮助开发者写出更高质量、更易于维护的代码。 - **注意**:虽然继承和多态非常有用,但在实际项目中应当适度使用,过度依赖继承可能会导致复杂度增加。 - **建议**:在设计类结构时,应当...
《Effective Java》是Java开发领域的经典著作,由Joshua Bloch撰写,中文版为《Effective Java3rd》,这本书深入探讨了编写高质量Java代码的最佳实践。本压缩包包含的"Effective.Java3rd.pdf"是该书的中文翻译版,...
Java编程对于初学者来说,遵循一套基本规则可以帮助写出高效、可读性强的代码。以下是对标题和描述中提及的一些规则的详细解释: 1. **命名规范**: - 类名应以大写字母开头,每个单词首字母大写,如`...
Java SCJP(Sun Certified Programmer for the Java 2 Platform)是一门认证考试,旨在验证程序员对Java语言基础的掌握。...理解这些概念对于通过SCJP考试至关重要,同时也是编写高质量Java代码的基础。
### Java核心技术(原书第12版) #### 核心概念与语法 - **面向对象编程**:Java是一种完全的...这些建议和技术细节不仅有助于提高代码质量和效率,还能加深对Java平台的理解,进而写出更加健壮和高性能的应用程序。
### 新手入门写Java程序的三十个基本规则 #### 规则一:命名规范 - **类名**:首字母大写,多个单词时每个单词首...随着实践经验的积累,开发者将更好地理解这些规则背后的逻辑和意义,从而写出更高质量的Java程序。