目录
对于自定义对象的比较
在基本数据类型中 可以直接通过 < > = 进行比较
而对于 java 对象是无法这样比较的,
直接比较,比较的是两个对象的地址,因此结果是false。
有三种方式比较 java对象
通过equals 比较是否两对象 是否相同
通过接口 compare 实现 两个对象 大于 小于 等于 关系的判断
1 覆写基类的equals
两对象的比较不能直接就使用equals 因为所有自定义对象 都是继承于Object对象,而在Object对象的源码里,是直接用 == 号比较的
如图,结果是一样的
因此,需要自己重写equals
重写后,再比较,比较的就是两个对象的内容了,因为两个对象完全相同,所以比较结果为true
equals只能 比较是否相同,无法比较大小
2 基于Comparble接口类的比较
要想实现比较大小 需要实现Comparble接口
如图,比较两个对象的年龄大小, 为0 相等,为负数 小于,为正数 大于
谁调用compareTo方法,谁就是this。
改下年龄,再比较:
但是,这样就把compare方法给写死了,比如现在就只能比较年龄,如果想比较姓名,修成比较姓名后,就会导致原先的代码(比较年龄的代码)出bug,由此引出下面另外一种方法
3 基于比较器比较
构造一个类实现Comparator接口
class NameComparator implements Comparator<Student> {
@Override
public int compare(Student o1,Student o2) {
return o1.name.compareTo(o2.name);
}
}
此时比较的是姓名,姓名相同,所以返回的是 0
同理,可写出 age的比较器进行比较
结果为负数 表明 student1 的age 小于 student2