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

news/2024/7/7 20:21:06

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


http://lihuaxi.xjx100.cn/news/237305.html

相关文章

区块链技术名词简介

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 零知识证明 零知识证明指证明者能在不向验证者提供任何有用的信息下,使验证者相信某个论断是正确的。零知识证明实质是一种涉及两方或更…

RPC-原理及RPC实例分析

还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞; (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻塞 区别 在学校期间大家都写过不少程序,比如写个…

C++基础技术简介

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 容器 容器用于存储数据元素,是由长度可变的同类型的元素构建成的序列。 Vector:用于快速定位任意元素及主要在元素序列的尾…

客户旅程_编程如何找到我的:21岁开发人员的7年旅程

客户旅程Ive read some amazing stories about peoples coding journeys here, and I was interested to share my own as well. Before starting out with anything about my journey, let me introduce myself quickly here, and then well go into flashback mode. 我在这里…

usermod

功能说明:用于修改系统已经存在的用户账号信息。 参数选项:-c comment 修改用户password文件中用户说明栏,同useradd -c功能。-d home_dir 修改用户每次登入时所使用的家目录,同useradd -d功能。-e expired_date 修改用户终止日期…

D3.js系列——初步使用、选择元素与绑定数据

D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。 D3 提供了各种简单易用的…

开坑序言

保持了多年的博客习惯,在进入工作后却慢慢的被荒废了。其实,在大学期间就有意识的通过博客来归纳总结一些学习中认为比较重要的知识技能。只是当时限于知识面的束缚,总结的都是一些比较基础浅薄的东西。   在经历了将近一年的工作后&#x…

背景图像位置css_CSS背景图像大小教程–如何对整页背景图像进行编码

背景图像位置cssThis tutorial will show you a simple way to code a full page background image using CSS. And youll also learn how to make that image responsive to your users screen size.本教程将向您展示一种使用CSS编写整页背景图像的简单方法。 您还将学习如何使…