内部比较器简单的来理解,就是可用用来比较一个类内部对象大小,在使用中,如果哪个类中需要比较对象,那么就要实现Comparable这个接口即可
下面是代码演示:
1、分别定义一个普通类FU类和测试类Test
![在这里插入图片描述](https://img-blog.csdnimg.cn/802f6ae1d8b6496fa7634f520b71dede.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4b8572d748b74197ad7cdd9af11d6f8b.png)
2、我们在普通类中定义一个私有属性年龄age,在分别创建有参构造和无参构造,用于测试类的调用
![在这里插入图片描述](https://img-blog.csdnimg.cn/4cd02aa9da7a4a5f8b24682591b62687.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
3、我们在测试类调用构造函数并赋值,因为是比较,所以,我们创建两个方便比较
![在这里插入图片描述](https://img-blog.csdnimg.cn/42ada88dccd94fe988dae23040f21093.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
4、我们两个类都已经创建完毕,现在最关键的一步来了,实现Comparable来进行比较
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ada7dc0fcad47c1ad9879a1ceb0e16c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
4、使用普通类,实现Comparable接口,并重写方法
实现之后,他会提示你重写里面的compareTo方法,选择重写即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/dc05c68ce3e84970a9ab0681bdb4a3f0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
这里需要注意的是,在我们实现接口时,后面记得添加上泛型<普通类类名>
![在这里插入图片描述](https://img-blog.csdnimg.cn/ab9ebca9125648dabd6301f28ca6d87a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
5、这个重写的这个compareTo方法就是可以实现对象之间比较,我们还需要 在里面填写代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/b36566abb09d4e04ac5116262ea7188d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
6、然后我们在测试类中,用测试类中的两个变量fu和fu1中,调用compareTo方法来进行比较
![在这里插入图片描述](https://img-blog.csdnimg.cn/80557f19c3c54e1ca4c5ecbda9b14304.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
7、如果输出的结果为0,则代表相等;正的话,age比较大;为负的话,代表age2比较大
8、如果这两个数不是int类型的,而是String类型的,引用类型的该怎么办?这个时候,我们就要在重写方法内引用compareTo的方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/e81f958bf0fd4da4a96a7f91a1501e33.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
9、在测试类引用
![在这里插入图片描述](https://img-blog.csdnimg.cn/e811ccf5daa54079822168961265768c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
10、运行,很明显,张三大于李四
![在这里插入图片描述](https://img-blog.csdnimg.cn/0ddabec644bb480ba3a71c7b58f2e47b.png)
11、这里要注意,我们之前在重写方法内返回的age-age2,这个完全是我们手写的比较方法,但是在比较name的时候,使用的是compareTo的内部方法 下面是name的比较源码:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2136d88c515342d381309f9f5493b337.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ4NDYyNjQ4,size_16,color_FFFFFF,t_70)
12、但是要注意,无论我们返回的什么,我们实现的还是Comparable方法,最终的操作还是属于内部比较器