String equalsIgnoreCase()vs JDK 7 Objects.equals(Object,Object)

时间:2015-08-05 13:18:46

标签: java string object equals

通过更换以下内容,我会失去任何东西:

$ echo "4 5 1 2 3" | awk 'FNR==NR {n=split($0,lines); next} {a[FNR]=$0} END {for (i=1;i<=n;i++) print a[lines[i]]}' - a

来自JDK 7 Objects class

    public final boolean testEquals(String left, String right) {
        if ((left == null && right != null) || (left != null && right == null)) {
            return false;
        } else if (left == null && right == null) {
            return true;
        } else {
            return left.equalsIgnoreCase(right);
        }
    }

如果我失去了不区分大小写,请将其替换为

    public final boolean testEquals(String left, String right) {
        return Objects.equals(left,right);
    }

足够?它有意义吗?

2 个答案:

答案 0 :(得分:4)

如果您不仅限于JDK,您可以使用

StringUtils.equalsIgnoreCase(CharSequence str1, CharSequence str2)

来自apache-commons lang

是空的,并且会返回

 StringUtils.equalsIgnoreCase(null, null)   = true
 StringUtils.equalsIgnoreCase(null, "abc")  = false
 StringUtils.equalsIgnoreCase("abc", null)  = false
 StringUtils.equalsIgnoreCase("abc", "abc") = true
 StringUtils.equalsIgnoreCase("abc", "ABC") = true

答案 1 :(得分:1)

方法String.equalsIgnoreCase(String) &#34;不幸的是&#34; 稍微复杂一点。您可以查看代码,但在the javadoc itself

中对此进行了详细说明
  

将此String与另一个String进行比较,忽略大小写。   如果它们是相同的,则认为两个字符串忽略大小写   两个字符串中的长度和对应字符是相等的   无视案例。

     

如果在,则两个字符c1和c2被视为相同的忽略大小写   至少有以下一种情况属实:

     
      
  • 两个字符相同(通过==运算符比较)
  •   
  • 将方法Character.toUpperCase(char)应用于每个字符会产生相同的结果
  •   
  • 将Character.toLowerCase(char)方法应用于每个字符会产生相同的结果
  •