美文网首页
Effective Java读书笔记--第3章 对于所有对象都通

Effective Java读书笔记--第3章 对于所有对象都通

作者: Huigesi | 来源:发表于2018-10-09 14:44 被阅读10次

    个人读书笔记,部分没读懂的知识点可能会简单概括或缺失,以后反复阅读后再完善。

    第3章 对于所有对象都通用的方法

    主要讲述非final方法(equals、hashCode、toString、clone和finalize)被覆盖时要遵守的通用约定。

    第8条: 覆盖equals时请遵守通用约定

    满足什么条件可以不用去覆盖equals方法?

    ·类的每个实例本质上都是唯一的。

    例如Thread。

    ·不关心类是否提供了“逻辑相等(logical equality)”的测试功能

    例如java.util.Random

    ·超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的。

    例如Set实现从AbstractSet继承equals实现。

    在“值类”(Integer或者Date)中需要对equals方法进行覆盖。有一种“值类”不需要覆盖,比如枚举类型。

    覆盖equals方法的时候要遵循的通用约定:

    ·自反性

    对于任何非null的引用值x,x.equals(x)必须返回true。其实就是要求对象必须等于自身。

    ·对称性

    x.equals(y)为true,则y.equals(x)为true。

    ·传递性

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

    ·一致性

    只要对象信息没有被修改,多次调用后依然为true。

    ·非空性

    所有对象都必须不等于null。

    第9条:覆盖equals时总要覆盖hashCode

    应用程序执行期间,只要对象的信息没有被修改,那么对这同一对象调用多次,hashCode方法都必须
    始终如一地返回同一个整数。

    如果两个对象根据equals方法比较时相等的,那么调用其中一个对象的hasCode方法都必须产生同样的整数结果。

    第10条: 始终要覆盖toString

    实际应用中,toString方法应该返回对象中包含的所有值得关注的信息。

    第11条: 谨慎地覆盖clone

    如果覆盖了非final类中的clone方法,则应该返回一个通过调用super.clone而得到的对象。

    第12条: 考虑实现Comparable接口

    相关文章

      网友评论

          本文标题:Effective Java读书笔记--第3章 对于所有对象都通

          本文链接:https://www.haomeiwen.com/subject/dpneaftx.html