背景:最近在研究静态扫描的东西,遇到一个规则:"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.

转载于:https://www.cnblogs.com/zhaijing/p/9497396.html

解析equals(Object obj)和compareTo(T obj)相关推荐

  1. 在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法

    如标题,解释都在代码注释中 主方法及目的 ··· package cn.com.testCollection; import java.util.Iterator; import java.util. ...

  2. Object类 Integer类 Character类 Float类 String类------中的 hashCode() 方法 与 equals(Object obj) 方法的实现的探讨

    hashCode方法 与 equals 方法 Object中的: hashCode() equals() Integer中的 hashCode() equals() Character中的 hashC ...

  3. object+java+equals_java-为什么SparseIntArray.equals(Object)不起作用?

    我正在使用SparseIntArray,对此行为感到困惑: public static SparseIntArray getArray() { SparseIntArray result = new ...

  4. js之for in循环遍历对象(包括输出value值为什么是obj[k]而不是obj.k)

    var obj = {name: 'chen',age: 18,professional:'student'}for (var k in obj) {console.log(k); // k 输出的是 ...

  5. Python 将两个三维模型(obj)合成一个三维模型(obj)

    本文主要针对想要将两个obj保存的三维模型合成一个三维模型即obj文件保存.这样就可以同时观察并对比两个三维模型.Trimesh是对三维网格模型处理十分好用的库,本次代码即基于此库! ######## ...

  6. 使用tlink链接多个obj时会出现 Bad object file record in ..objxxx.obj near module file offset 0×00000000

    出现这个问题,需要更换tlink,最方便的方式是直接更换bcc包. 如果有出现这种情况的,可以使用下边这个bcc 链接:点我 提取码:3w1b 直接替换删了原来的bc31,用这个压缩文件里面的bc31 ...

  7. 【Java】字符串对象的比较(==、equals、equalsIgnoreCase、compareTo、compareToIgnoreCase、校对顺序比较)

    字符串对象的比较 文章目录 字符串对象的比较 1.==:比较是对象的地址 2.equals:比较是字符串对象的内容 3.equalsIgnoreCase:比较的是字符串对象的内容,不区分大小写 4.c ...

  8. 使用Java中的equals()和compareTo()方法比较字符串

    Given strings and we have to compare them using equals() and compareTo() method. 给定字符串,我们必须使用equals( ...

  9. 关于style设置方法,obj.setAttribute(style.)和obj.style.stylename

    1.使用obj.setAttribute("style"."")方法: obj.setAttribute("style","-we ...

最新文章

  1. Android中的多线程(字节跳动)
  2. IntelliJ IDEA 的 project 和 module 区别与关系
  3. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件
  4. AjaxFileUpload 在C#中应用
  5. nodec mysql_Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南
  6. php 变量 可用拼音表示,php汉字转拼音的示例
  7. ora-03113 访问某条记录_用了Excel十几年,你居然不知道“记录单”?!可能错过一个亿……...
  8. Hadoop2.0安装
  9. 酒吧手机游戏java_酒吧里24种常见游戏的玩法
  10. mescroll vue使用
  11. 弥合银行业的数字鸿沟
  12. 六个机械原理,动图形象直观、解读通俗易懂
  13. Xcel 测试版使用手册
  14. 职高学计算机考大学容易吗,男生读职高什么专业好 能不能考大学
  15. 打造一个生命周期感知的MVP架构
  16. Webpack5快速入门 (二) CSS相关loader的使用及兼容性处理 手把手带你打开前端工程化的大门
  17. 关于汽油清洁剂,到底该不该加
  18. tpc ds mysql_TPC-DS 数据仓库查询性能测试
  19. 七、jsp基础(七)-- 总结
  20. 一个自学网络安全攻防的弱鸟简单描述下关于压力测试如何实现的

热门文章

  1. python判断质数的函数并输出_【python基础】|| 用python判断输入的数是否为素数
  2. python22期_python学习第22期
  3. python函数编程求三个数的最小公倍数_Python求三个数的最小公倍数
  4. 2019智能手表推荐_智能手表一定越贵越好?试用过后这五款才真正值得推荐
  5. named 客户端无法解析_解析天联高级版客户端无法访问用友U8问题
  6. android锁屏流程_Android开机锁屏流程分析
  7. SpringBoot中的SFL4J日志
  8. Java项目:在线考试系统(单选,多选,判断,填空,简答题)(java+Springboot+ssm+mysql+html+maven)
  9. oracle生成xml方法,oracle存储过程生成xml==转
  10. ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客