00018.02String对象的比较—— ==和equals的区别

系列文章目录

前言

一、==,比较对象地址

00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别
不是true了,因为对象的地址已经不同了
所以我们得出
结论:只有两个字符串的常量对象比较时才会返回true,其他的都是false

二、equals比较,比较字符串的内容

equals:比较字符串的内容,严格区分大小写
为什么equals能够比较字符串的内容,因为因为String类型重写了Object的equals
00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别

三、equalsIgnoreCase(String anotherString) :比较字符串内容,不区分大小写

验证码的应用,验证码是不区分大小写的

四、大小比较

00018.02String对象的比较—— ==和equals的区别
对象是不支持运算符号的
拆箱啥的也不行,别乱想,这里根本不是包装类
我们这里是自然比较,实现了Comparable接口,重写了compareTo方法,String类型也实现了Comparable接口,也就同样也会有compareTo方法
00018.02String对象的比较—— ==和equals的区别
效果如下:
00018.02String对象的比较—— ==和equals的区别
String类型实现了Comparable接口,重写了compareTo方法,严格区分大小写,依次比较对应位置的字符
hello和Hello,先[0]位置的h和H,h>H,就直接认定为hello>Hello
hello和hella,先[0][1][2][3]比较,都一样,最后到[4]o>a,认定hello>hella
hello和helloworld,发现前面都一样,长的大

五、大小比较:不区分大小写

排序的时候能用上
String类型提供了一个方法compareToIgnoreCase,可以忽略大小写比较大小
00018.02String对象的比较—— ==和equals的区别
如果不想区分大小写:
00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别
前面我们讲的都是按照字母排序,如果是按照汉字排序,怎么处理

六、按照每个国家的语言校对顺序

00018.02String对象的比较—— ==和equals的区别
看似无序,实际上是 按照自然顺序,按照每一个字符的Unicode编码值排序的,如果我们想按照拼音排序怎么处理
改造:
用定制比较

00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别

java.text.Collator:Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。
Collator实现了Comparator接口 ,
Collator是抽象类,不能直接创建对象,它有一个直接子类RuleBasedCollator
Collator内部提供了一个静态方法,可以获取一个它的子类对象
如下
00018.02String对象的比较—— ==和equals的区别
00018.02String对象的比较—— ==和equals的区别
基本上是按照拼音的排序,百分百是不能的,因为中文有多音字
还有一个问题
默认语言环境,因为我现在的操作系统的平台是中文win,如果是跨平台的,但是还是想按照拼音排序怎么处理
00018.02String对象的比较—— ==和equals的区别
可以加参数指定语言环境

总结

有点枯燥,都是基础,源码等知识