java 对象的比较

目录

1 覆写基类的equals

2 基于Comparble接口类的比较

3 基于比较器比较


对于自定义对象的比较

在基本数据类型中 可以直接通过 < > = 进行比较

而对于 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 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值