前言
平时开发,经常需要对字符串进行比较操作,本章整理字符串比较的使用案例,介绍在使用过程中需要注意的细节。
版本约定
- JDK 版本:1.8.0_231
- Java SE API Documentation:https://docs.oracle.com/javase/8/docs/api/
正文
在平时使用过程中,字符串比较使用的较多,我们应该都知道不能使用 ==
运算符比较两个字符串是否相等,这个运算符只能够确定两个字串是否放置在同一个位置上。
我们比较字符串关注的是它的内容是否相等,所以我们知道需要使用 String 类的 equals
方法检测两个字符串是否相等。
比如比较两个字符串是否相等,使用如下写法:
public static void main(String[] args) {
String str1 = "test";
String str2 = "test";
System.out.println(str1.equals(str2));
}
运行程序,输出:
true
当然,如果我们想要检测两个字符串是否相等,且不区分大小写, 可以使用 equalsIgnoreCase
方法。
public static void main(String[] args) {
String str1 = "test";
String str2 = "TEST";
System.out.println(str1.equalsIgnoreCase(str2));
}
运行程序,输出:
true
到这里字符串比较还没有结束,因为上面的代码漏考虑了一个问题,如果字符串 str1 或者 str2 是 null,需要怎么处理呢?
比如把上面的代码中 str1 设置成 null:
public static void main(String[] args) {
String str1 = null;
String str2 = "test";
System.out.println(str1.equals(str2));
}
运行程序,输出:
Exception in thread "main" java.lang.NullPointerException
at test10.Test4.main(Test4.java:12)
它会报空指针异常,这就非常危险了,大家看看你们的代码中有多少是直接使用这种 equals
方法比较的?推荐使用 commons-lang3 中的 StringUtils 工具类比较两个字符串是否相等。
public static void main(String[] args) {
String str1 = null;
String str2 = "test";
System.out.println(StringUtils.equals(str1, str2));
}
同样的,它也提供了 equalsIgnoreCase
方法比较两个字符串是否相等,且不区分大小写。
总结
字符串的比较推荐使用 StringUtils 工具类中的 equals
方法。
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/dcirrg 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。