检查string.length == 0是否仍然比检查字符串==“”更快?

时间:2012-09-25 19:52:34

标签: java .net string performance

我在大约7 - 8年前从编程书中读到,检查string.length == 0是检查空字符串的更快方法。我想知道这个陈述今天是否仍然适用(或者它是否真的完全如此),因为我个人认为string == ""更直接,更具可读性。我主要处理高级语言,如.NET和java。

5 个答案:

答案 0 :(得分:7)

在Java中进行该测试的最佳方法是

"".equals(string)

因为它处理string为null的情况。

至于哪个更快,我认为答案是它并不重要。两者都非常快,哪一个实际上最快取决于内部编译器实现。

答案 1 :(得分:6)

只需使用string.isEmpty()

(我拒绝"".equals(string),因为如果你有一个null,那可能表示一个错误会导致程序崩溃,因为它需要修复。我不能容忍空值。)

答案 2 :(得分:3)

通常,字符串对象存储它们的长度,因此获取和比较整数非常快,并且比equals()更少的内存访问,在最坏的情况下,你必须检查长度并循环遍历字符。 / p>

无论如何,现在字符串的equals()方法也应首先检查长度,因此它应该 - 几乎与检查长度的速度相同。

等于 Java (http://www.docjar.com/html/api/java/lang/String.java.html)中的部分:

int n = count;
if (n == anotherString.count) {...}

等于 Objective-C (http://www.opensource.apple.com/source/CF/CF-476.15/CFString.c) - NSString基于CFString:

if (len1 != __CFStrLength2(str2, contents2)) return false;

答案 3 :(得分:1)

您需要注意使用==来测试字符串相等性。如果变量字符串未被实现,则测试很可能会失败。

String a = "abc";
String b = a.substring(3);
System.out.println("b == \"\": " + (b == "")); // prints false
System.out.println("b.equals(\"\"): " + b.equals("")); // prints true

我会使用string.length() == 0string.equals("")。基准看看哪个更快。

答案 4 :(得分:-1)

使用"".isEmpty()检查空字符串。效果很好,并且对于null对象也返回“true”。

String.isEmpty()

.equals()如果为空则抛出NullPointerException,这会让人讨厌。

此外,假设这是在Java API中,可以安全地假设它是最快的方法。