Java中对象的比较

Java中有些情况下需要比较对象的内容,那么怎么比较对象的内容呢?
下面介绍三种比较方式。

覆写基类的equal

第一种,覆写equals方法可以比较两个对象的内容是否相等,实现如下:

class Teacher{
    String name;
    
    Teacher(String name){
        this.name=name;
    }

    //覆写equals方法  如果不覆写t1.equlas(t2)也是不相等的
    @Override
    public boolean equals(Object o) {
        //检查是否为空 空一定不是
        if(o==null){
            return false;
        }
        //检查类型 不同的类型一定不能代表同一事物
        if(!(o instanceof Teacher)){
            return false;
        }
        //根据我们设计类的目的 名字相同代表同一事物
        Teacher obj=(Teacher)o;//向下转型
        //比较
        return this.name.equals(obj.name);
    }
}
public class demo {
    public static void main(String[] args) {
        Teacher t1=new Teacher("lili");
        Teacher t2=new Teacher("lili");
        Teacher t3=new Teacher("lisa");
        //t1所指向的对象和t2所指向的对象是否代表了同一个现实事物 需要开发者指导Java
        System.out.println(t1.equals(t2));//true
        System.out.println(t2.equals(t3));//false
    }
}

基于Comparable接口类的比较

equal只能比较是否相等,不能比较出大于小于,以下介绍第二种方法:
需要在定义类时,实现Comparable接口即可,然后在类中重写compareTo方法。
具体实现如下:

class Teacher implements Comparable<Teacher>{
    String name;
    int age;
    int weight;
    int height;

    public Teacher(String name, int age, int weight, int height) {
        this.name = name;
        this.age = age;
        this.weight = weight;
        this.height = height;
    }

    //通过重写该方法 指导Java 进行对象大小的比较
    //natural ordering
    //大小如何有哪个条件决定 由开发者自行选择
    //此处按照年龄比较
    @Override
    public int compareTo(Teacher o) {
        if(this.age<o.age){
            return -1;
        }else if(this.age==o.age){
            return 0;
        }else{
            return 1;
        }
        //return age-o.age;等价
    }
}
public class demo {
    public static void main(String[] args) {
        Teacher t1=new Teacher("lili",18,55,168);
        Teacher t2=new Teacher("lisa",19,60,170);
        int r=t1.compareTo(t2);
        if(r<0){
            System.out.println("lili<lisa");
        }else if(r==0){
            System.out.println("lili=lisa");
        }else{
            System.out.println("lili>lisa");
        }
    }
}

基于比较器比较

但在有些情况下,不支持Comparable接口,无法修改类,此时就需要用到比较器。
需要用户自定义比较器类,实现Comparator接口,然后覆写Comparator中的compare方法。
具体实现如下:

class Teacher {
    String name;
    int age;
    int weight;
    int height;

    public Teacher(String name, int age, int weight, int height) {
        this.name = name;
        this.age = age;
        this.weight = weight;
        this.height = height;
    }
}

class ByHeightComparator implements Comparator<Teacher>{
    @Override
    public int compare(Teacher o1, Teacher o2) {
        return o1.height-o2.height;
    }
}

class ByWeightComparator implements Comparator<Teacher>{
    @Override
    public int compare(Teacher o1, Teacher o2) {
        return o1.weight-o2.weight;
    }
}

public class demo {
    public static void main(String[] args) {
        Teacher t1=new Teacher("lili",18,65,168);
        Teacher t2=new Teacher("lisa",19,60,170);
        Comparator<Teacher> byheight=new ByHeightComparator();
        Comparator<Teacher> byweight=new ByWeightComparator();

        int r1=byheight.compare(t1,t2);
        int r2=byweight.compare(t1,t2);
        System.out.println(r1);
        System.out.println(r2);
    }
}

以上就是Java中对象比较的三种方式了,码字不易,感谢支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值