• 解析equals(Object obj)和compareTo(T obj)


    背景:最近在研究静态扫描的东西,遇到一个规则:"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method

             然后就想深度扒一扒equals和compareTo有什么区别

    1.java.lang.Object是所有类的父类,java.lang.String类继承了Object类,String类是final类,是不能被继承的,

    Object类的成员方法equals(Object obj)用来比较两个对象是否相等:对于任何非null的引用x和y,当且仅当x和y指向同一个对象的时候,x.equals(y)返回true。

     2.java.lang.Comparable是一个接口,成员方法compareTo(T o)是从顺序上来比较本对象跟指定的对象,当本对象小于指定的对象,返回负整数,当本对象等于指定的对象,返回0,当本对象大于指定的对象返回正整数,

    实现必须确保对于所有的x和y,sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) (意味着如果y.compareTo(x)抛出异常,那么x.compareTo(y)也一定会抛出异常

    实现必须确保关系是可以传递的,x.compareTo(y)&&y.compareTo(z)>0意味着x.compareTo(z)>0

    最后实现必须保证 x.compareTo(y)==0,代表对于所有的z ,sgn(x.compareTo(z)) == sgn(y.compareTo(z))

    强烈推荐但不是严格要求(x.compareTo(y)==0) == (x.equals(y)),一般地任何实现Comparable接口的类如果违法这个规则需要明确地指出来这个问题,更推荐的说法是:这个类有自然的顺序跟equals是一致的。

    在前面的描述中,记号sgn(expression)是数学的正负号函数,定义了如果表达式的值是负数,返回-1,表达式的值是0,返回0,表达式的值是整数,返回1

    int compareTo(T o)

    Parameters:

    o - the object to be compared.
    Returns:
    a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
    Throws:
    NullPointerException - if the specified object is null
    ClassCastException - if the specified object's type prevents it from being compared to this object.
  • 相关阅读:
    关于前端复用的构思
    react-redux单元测试(基于react-addons-test-utils,mocha)
    关于windows下NODE_ENV=test无效的情况解决办法
    javascript柯里化及组合函数~
    如何使用函数式编程?
    redux源码解析-函数式编程
    react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)
    jQuery高级技巧——性能优化篇
    jQuery高级技巧——DOM操作篇
    使用checkbox实现纯CSS下拉框
  • 原文地址:https://www.cnblogs.com/zhaijing/p/9497396.html
Copyright © 2020-2023  润新知