Java之对象比较

发布于:2022-11-15 ⋅ 阅读:(784) ⋅ 点赞:(0)

目录

1 同一性比较

2 相等性比较

3 需要比较对象之间的大小关系

   3.1 Comparable接口比较(两个对象)

        3.1.1 已经实现了Comparable接口的类(例如下面的String类)

        3.1.2 自己定义类并实现Comparable接口

        3.1.3 正确的重写compareTo方法

        3.1.4 小结

   3.2 Comparator接口(比较器)比较(三个对象)

        3.2.1 使用要求

        3.2.2 compare方法的重写

        3.2.3 正确的调用compare方法(需要三个对象(引用))

4 Comparator的使用场景    

5 三种比较方式小结


1 同一性比较

        对象的引用使用 == 比较的是同一性,即地址是否相同

        1)引用1 == 引用2,表示两个引用指向同一个对象

        2)特例,引用1  == 引用2 == null 表示两个引用不指向任何对象


2 相等性比较

        使用equals方法进行比较,前提是该对象类重写了equals方法,否则会调Object的equals方法还是比较的同一性

        例如String类的比较,str1.equals(str2),如果返回值为true表示两种内容相等(str1 == str2 是一种特殊的相等性情况)


3 需要比较对象之间的大小关系

        Java语言有一个规范,要求类实现Comparable或Comparator接口,接口继承Comparable或Comparator接口才具备可比较的能力。


   3.1 Comparable接口比较(两个对象)

        3.1.1 已经实现了Comparable接口的类(例如下面的String类)

        至于下面的compareTo方法返回值是什么,代表什么含义,读者请自行查看方法源码


        3.1.2 自己定义类并实现Comparable接口

        定义一个Class类实现Comparable接口具备了比较能力,并且正确的重写了compareTo方法,其中泛型中的Person表示compareTo方法传入的对象时Person类。


         我们自定义的比较大小的规则为:哪个Person类的level属性值大就代表哪个对象大


        3.1.3 正确的重写compareTo方法

  

        3.1.4 小结

   3.2 Comparator接口(比较器)比较(三个对象)

        3.2.1 使用要求

         要比较的两个对象是同一个类


        3.2.2 compare方法的重写

        用到第三个类去实现Comparator接口并重写compare方法


        3.2.3 正确的调用compare方法(需要三个对象(引用))


4 Comparator的使用场景    

        1) 要比较的两个对象类,不具备自然顺序,即没实现Comparable接口

        2) 要比较的两个对象具备自然顺序,但这个顺序不符合我们的比较要求  


        以下给出第二种情况的例子 

        如下例我们想要的结果是甲 < 乙,但是String类虽然实现了Comparable接口(有了自然顺序),但是不符合我们的比较要求


        因此我们定义一个额外的类去实现Comparator接口


5 三种比较方式小结

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到