解析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.
转载于:https://www.cnblogs.com/zhaijing/p/9497396.html
解析equals(Object obj)和compareTo(T obj)相关推荐
- 在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
如标题,解释都在代码注释中 主方法及目的 ··· package cn.com.testCollection; import java.util.Iterator; import java.util. ...
- Object类 Integer类 Character类 Float类 String类------中的 hashCode() 方法 与 equals(Object obj) 方法的实现的探讨
hashCode方法 与 equals 方法 Object中的: hashCode() equals() Integer中的 hashCode() equals() Character中的 hashC ...
- object+java+equals_java-为什么SparseIntArray.equals(Object)不起作用?
我正在使用SparseIntArray,对此行为感到困惑: public static SparseIntArray getArray() { SparseIntArray result = new ...
- 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 输出的是 ...
- Python 将两个三维模型(obj)合成一个三维模型(obj)
本文主要针对想要将两个obj保存的三维模型合成一个三维模型即obj文件保存.这样就可以同时观察并对比两个三维模型.Trimesh是对三维网格模型处理十分好用的库,本次代码即基于此库! ######## ...
- 使用tlink链接多个obj时会出现 Bad object file record in ..objxxx.obj near module file offset 0×00000000
出现这个问题,需要更换tlink,最方便的方式是直接更换bcc包. 如果有出现这种情况的,可以使用下边这个bcc 链接:点我 提取码:3w1b 直接替换删了原来的bc31,用这个压缩文件里面的bc31 ...
- 【Java】字符串对象的比较(==、equals、equalsIgnoreCase、compareTo、compareToIgnoreCase、校对顺序比较)
字符串对象的比较 文章目录 字符串对象的比较 1.==:比较是对象的地址 2.equals:比较是字符串对象的内容 3.equalsIgnoreCase:比较的是字符串对象的内容,不区分大小写 4.c ...
- 使用Java中的equals()和compareTo()方法比较字符串
Given strings and we have to compare them using equals() and compareTo() method. 给定字符串,我们必须使用equals( ...
- 关于style设置方法,obj.setAttribute(style.)和obj.style.stylename
1.使用obj.setAttribute("style"."")方法: obj.setAttribute("style","-we ...
最新文章
- Android中的多线程(字节跳动)
- IntelliJ IDEA 的 project 和 module 区别与关系
- Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件
- AjaxFileUpload 在C#中应用
- nodec mysql_Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南
- php 变量 可用拼音表示,php汉字转拼音的示例
- ora-03113 访问某条记录_用了Excel十几年,你居然不知道“记录单”?!可能错过一个亿……...
- Hadoop2.0安装
- 酒吧手机游戏java_酒吧里24种常见游戏的玩法
- mescroll vue使用
- 弥合银行业的数字鸿沟
- 六个机械原理,动图形象直观、解读通俗易懂
- Xcel 测试版使用手册
- 职高学计算机考大学容易吗,男生读职高什么专业好 能不能考大学
- 打造一个生命周期感知的MVP架构
- Webpack5快速入门 (二) CSS相关loader的使用及兼容性处理 手把手带你打开前端工程化的大门
- 关于汽油清洁剂,到底该不该加
- tpc ds mysql_TPC-DS 数据仓库查询性能测试
- 七、jsp基础(七)-- 总结
- 一个自学网络安全攻防的弱鸟简单描述下关于压力测试如何实现的
热门文章
- python判断质数的函数并输出_【python基础】|| 用python判断输入的数是否为素数
- python22期_python学习第22期
- python函数编程求三个数的最小公倍数_Python求三个数的最小公倍数
- 2019智能手表推荐_智能手表一定越贵越好?试用过后这五款才真正值得推荐
- named 客户端无法解析_解析天联高级版客户端无法访问用友U8问题
- android锁屏流程_Android开机锁屏流程分析
- SpringBoot中的SFL4J日志
- Java项目:在线考试系统(单选,多选,判断,填空,简答题)(java+Springboot+ssm+mysql+html+maven)
- oracle生成xml方法,oracle存储过程生成xml==转
- ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客