字符串equalsIgnoreCase()与JDK 7 Objects.equals(Object,Object)

Jan*_*icz 4 java string equals object

通过替换以下内容,我是否会丢失任何东西:

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用JDK 7 Objects类中的代码

    public final boolean testEquals(String left, String right) {
        return Objects.equals(left,right);
    }
Run Code Online (Sandbox Code Playgroud)

如果我对大小写不敏感,请替换为

Objects.equals(left.toLowerCase(),right.toLowerCase()); 
Run Code Online (Sandbox Code Playgroud)

足够?这有意义吗?

Psh*_*emo 5

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

StringUtils.equalsIgnoreCase(CharSequence str1, CharSequence str2)

来自apache-commons lang,它是null安全的,将返回

 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
Run Code Online (Sandbox Code Playgroud)


dot*_*vav 1

“不幸的String.equalsIgnoreCase(String)是”该方法有点复杂。您可以查看代码,但javadoc 本身对此进行了很好的解释:

将此字符串与另一个字符串进行比较,忽略大小写。如果两个字符串长度相同,并且两个字符串中对应的字符忽略大小写相等,则认为两个字符串相等,忽略大小写。

如果以下至少一项为真,则两个字符 c1 和 c2 被视为相同,忽略大小写:

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