前言

平时开发,经常需要对字符串进行比较操作,本章整理字符串比较的使用案例,介绍在使用过程中需要注意的细节。

版本约定

在平时使用过程中,字符串比较使用的较多,我们应该都知道不能使用 == 运算符比较两个字符串是否相等,这个运算符只能够确定两个字串是否放置在同一个位置上。

我们比较字符串关注的是它的内容是否相等,所以我们知道需要使用 String 类的 equals 方法检测两个字符串是否相等。

比如比较两个字符串是否相等,使用如下写法:

  1. public static void main(String[] args) {
  2. String str1 = "test";
  3. String str2 = "test";
  4. System.out.println(str1.equals(str2));
  5. }

运行程序,输出:

  1. true

当然,如果我们想要检测两个字符串是否相等,且不区分大小写, 可以使用 equalsIgnoreCase 方法。

  1. public static void main(String[] args) {
  2. String str1 = "test";
  3. String str2 = "TEST";
  4. System.out.println(str1.equalsIgnoreCase(str2));
  5. }

运行程序,输出:

  1. true

到这里字符串比较还没有结束,因为上面的代码漏考虑了一个问题,如果字符串 str1 或者 str2 是 null,需要怎么处理呢?

比如把上面的代码中 str1 设置成 null:

  1. public static void main(String[] args) {
  2. String str1 = null;
  3. String str2 = "test";
  4. System.out.println(str1.equals(str2));
  5. }

运行程序,输出:

  1. Exception in thread "main" java.lang.NullPointerException
  2. at test10.Test4.main(Test4.java:12)

它会报空指针异常,这就非常危险了,大家看看你们的代码中有多少是直接使用这种 equals 方法比较的?推荐使用 commons-lang3 中的 StringUtils 工具类比较两个字符串是否相等。

  1. public static void main(String[] args) {
  2. String str1 = null;
  3. String str2 = "test";
  4. System.out.println(StringUtils.equals(str1, str2));
  5. }

同样的,它也提供了 equalsIgnoreCase 方法比较两个字符串是否相等,且不区分大小写。

总结

字符串的比较推荐使用 StringUtils 工具类中的 equals 方法。

作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/dcirrg 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。