哪个更快,equalsIgnoreCase或compareToIgnoreCase

blu*_*ene 8 java string

在Java应用程序中,假设我可以选择以下比较方法

equalsIgnoreCase(String anotherString)

compareToIgnoreCase(String str)

哪一个更快?

Jon*_*eet 32

equalsIgnoreCase 可以快得多.例如,考虑两个以相同的10,000个字符开头的字符串 - 但其中一个字符串最后有一个额外的字符.equalsIgnoreCase可以马上回来; compareToIgnoreCase必须迭代到字符串的末尾才能看到差异.

但一般来说,我会选择更好地表达你的意图.这对性能也很有效:假设我说这equalsIgnoreCase至少和compareToIgnoreCase它一样快,这意味着你应该尽可能地使用它 - 如果你需要实际的订购,你必须使用它compareToIgnoreCase.


dfa*_*dfa 9

如果你担心表演...... 测量它

  • 在这种情况下使用测量结果实际上很容易得出错误的结论,因为结果很大程度上取决于您测量的确切内容.首先获得一些洞察力是很好的 - 请参阅Jon Skeet的答案以获得一个好例子. (5认同)

Thi*_*ilo 6

查看java.lang.String的源代码

 public boolean equalsIgnoreCase(String anotherString) {
    return (this == anotherString) ? true :
           (anotherString != null) && (anotherString.count == count) &&
       regionMatches(true, 0, anotherString, 0, count);
 }
Run Code Online (Sandbox Code Playgroud)

因此,在它逐个字符地查看实际的字符串之前(也以类似的方式发生compareToIgnoreCase),equalsIgnoreCase还要检查引用标识和字符长度,这可能会非常快.