Java中对象的比较

目录

equals方法

Comparable接口

Comparator接口


Java中基本数据类型的对象可以直接比较大小

Java中对象的比较_第1张图片

而我们自己创建的引用类型的对象不能直接比较大小

Java中对象的比较_第2张图片

Java中对象的比较_第3张图片

可以看到引用对象用 '>' 和 '<' 时 比较时编译报错了

这里 '==' 没报错是因为 所有类型都继承Object类,

'==' 会默认调用Object类提供的equals方法比较

但是这里没有比较引用对象中的内容,只是比较两个对象的地址

equals方法

那么引用类型的对象如何比较呢

我们可以重写equals方法,来比较引用对象是否相等

Java中对象的比较_第4张图片

 Java中对象的比较_第5张图片

运行结果为

false

true

== 比较的是地址

Comparable接口

上述的equals只能判断是否相等,那么引用对象如何比较大小呢

定义类时,实现Comparable接口,在类中重写compareTo方法

compareTo方法的返回值有三种情况

== 0    说明this指向的对象 等于 o指向的对象

< 0      说明this指向的对象 小于 o指向的对象

>0       说明this指向的对象 大于 o指向的对象

Java中对象的比较_第6张图片

Java中对象的比较_第7张图片

Java中对象的比较_第8张图片

Java中对象的比较_第9张图片

这种比较方法有一个明显的缺陷,那就是只能比较一种数据

例如上面写的学生类,name 和 age 两个成员变量,只能选一个用来比较

如果有时候要用name比较,有时候要用age比较,这个方法就不好用了

Comparator接口

实现这个接口的类我们称为比较器类

实现这个接口,要重写compare方法,

compare返回值的三种情况与compareTo相同 

比较器类:        

Java中对象的比较_第10张图片      

比较器类的使用:

Java中对象的比较_第11张图片

你可能感兴趣的:(数据结构,java)