`
梦回下花园
  • 浏览: 20594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何写出高质量的equals方法

    博客分类:
  • JAVA
 
阅读更多
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方法后,应该问自己三个问题:它是否是对称的、传递的、一致的

0
0
分享到:
评论

相关推荐

    提高代码质量的方法.

    以上知识点涵盖了Java编程的多个方面,从基础语法到高级特性,旨在帮助开发者写出更健壮、更易于维护的代码。通过理解和应用这些最佳实践,可以提升代码的可读性、可扩展性和性能,从而降低维护成本,提高团队的工作...

    阿里巴巴java开发规范,开发手册,编写出高质量的java代码

    《阿里巴巴Java开发规范》是Java开发者的一份重要指南,它为编写高质量的Java代码提供了全面的规则和建议。这份规范源自阿里巴巴集团内部的实践经验,经过不断优化和完善,已经成为业界广泛认可的标准之一。以下是对...

    如何编出健壮的代码,java编程30条规则

    Java 编程 30 条规则 Java 编程 30 条规则旨在帮助开发者编写高...这 30 条规则对 Java 编程进行了详细的规定,帮助开发者写出高质量的 Java 代码。遵循这些规则,开发者可以写出更加简洁易读、易维护和可靠的代码。

    2024秋招java开发、测试开发最全八股文

    Object类的equals方法默认行为与==相同,但很多类如String重写了equals方法,以比较对象内容而非引用。同时,如果重写了equals,通常也需要重写hashCode方法以保持一致性。 4. 异常处理机制: 异常处理通过try-...

    java常用方法和方法大全

    以上只是Java常用方法和概念的一部分,Java API中包含大量实用的功能,熟练掌握它们能够帮助开发者更高效地编写高质量的代码。在学习过程中,不断实践和理解这些方法的使用场景和原理,将有助于提升编程技能。

    Effective Java第三版1

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,该书的第三版继续提供了关于如何编写高效、...《Effective Java》的每一项条目都是精心挑选的最佳实践,旨在帮助Java开发者写出更高质量的代码。

    .NET类库开发的设计准则.pdf

    文档《.NET类库开发的设计准则》详细阐述了如何设计高质量的.NET类库,涵盖了命名准则、类型设计、成员设计、异常处理、使用准则等多个方面。 命名准则是设计高质量类库的基础。在.NET开发中,大小写约定对于提高...

    写Java程序的三十个规则

    ### 写Java程序的三十个规则 ...以上规则不仅有助于编写高质量、可维护的Java代码,还能提升团队协作效率和软件项目的整体质量。遵循这些最佳实践,可以帮助开发者在实践中不断进步,写出更加优雅和高效的代码。

    写Java程序的三十个基本规则

    8. **避免巨型对象**:警惕写出大而全的对象,对象应代表应用程序中的概念,而不是整个程序的逻辑。 9. **封装不美观的代码**:将不美观或复杂的代码放在类的内部,提高代码整洁度。 10. **使用内部类**:当类间...

    Java 学习课件,继承和多态

    正确理解并运用这些概念可以帮助开发者写出更高质量、更易于维护的代码。 - **注意**:虽然继承和多态非常有用,但在实际项目中应当适度使用,过度依赖继承可能会导致复杂度增加。 - **建议**:在设计类结构时,应当...

    Effective.Java3rd.zip

    《Effective Java》是Java开发领域的经典著作,由Joshua Bloch撰写,中文版为《Effective Java3rd》,这本书深入探讨了编写高质量Java代码的最佳实践。本压缩包包含的"Effective.Java3rd.pdf"是该书的中文翻译版,...

    新手入门:写Java程序的三十个基本规则

    Java编程对于初学者来说,遵循一套基本规则可以帮助写出高效、可读性强的代码。以下是对标题和描述中提及的一些规则的详细解释: 1. **命名规范**: - 类名应以大写字母开头,每个单词首字母大写,如`...

    java--scjp考题复习

    Java SCJP(Sun Certified Programmer for the Java 2 Platform)是一门认证考试,旨在验证程序员对Java语言基础的掌握。...理解这些概念对于通过SCJP考试至关重要,同时也是编写高质量Java代码的基础。

    Java核心技术(1).pdf

    ### Java核心技术(原书第12版) #### 核心概念与语法 - **面向对象编程**:Java是一种完全的...这些建议和技术细节不仅有助于提高代码质量和效率,还能加深对Java平台的理解,进而写出更加健壮和高性能的应用程序。

    新手入门写Java程序的三十个基本规则

    ### 新手入门写Java程序的三十个基本规则 #### 规则一:命名规范 - **类名**:首字母大写,多个单词时每个单词首...随着实践经验的积累,开发者将更好地理解这些规则背后的逻辑和意义,从而写出更高质量的Java程序。

Global site tag (gtag.js) - Google Analytics