比较("=="、"equals"、Comparable、Comparator)

对象值相等的比较
“==”和equals
p == q 表示的是 p 和 q 两个引用指向同一个对象
p.equals(q) 表示 p 指向的对象 和 q 指向的 对象是否是值语义相等的

equals如果没有手动重写,默认执行的就是Object版本中的equals。比较规则和“==”一样
在这里插入图片描述
结果
在这里插入图片描述
手动重写equals
在这里插入图片描述
运行结果
在这里插入图片描述
有了下面这个条件,则可以使
String str = null;
“hehe”.equals(str)不会出现空指针异常
在这里插入图片描述
大于、等于、小于的比较

在这里插入图片描述
使用Comparable接口的时候,最好指定泛型参数。编译器自动的完成类型效验工作,如果不写泛型参数,默认的comparaTo方法的参数类型就是Object类型。需要手动进行类型转换
对compareTo进行重写
使用Comparable的时候,你必须让要比较的类实现Comparable接口(需要修改这个类的代码)
在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述
Comparator的使用
使用Comparator的时候,你是重新创建一个新的类实现Comparator接口,不需要修改待比较的代码
在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述

equals 和 Comparable 是两个互不相干的东西

Comparable 与 Comparator 比较
使用Comparable的时候,你必须让要比较的类实现Comparable接口(需要修改这个类的代码)
在这里插入图片描述
直接让Card这个类实现Comparable接口

使用Comparator的时候,你是重新创建一个新的类实现Comparator接口,不需要修改待比较的代码
在这里插入图片描述
重新写了一个类,他的泛型参数是Card

覆写的方法
Object.equals :
因为所有类都是继承自 Object 的,所以直接覆写即可,不过只能比较相等与否
Comparable.compareTo:
需要手动实现接口,侵入性比较强,但一旦实现,每次用该类都有顺序,属于
内部顺序
Comparator.compare:
需要实现一个比较器对象,对待比较类的侵入性弱,但对算法代码实现侵入性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值