我在大约7 - 8年前从编程书中读到,检查string.length == 0
是检查空字符串的更快方法。我想知道这个陈述今天是否仍然适用(或者它是否真的完全如此),因为我个人认为string == ""
更直接,更具可读性。我主要处理高级语言,如.NET和java。
答案 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() == 0
或string.equals("")
。基准看看哪个更快。
答案 4 :(得分:-1)
使用"".isEmpty()
检查空字符串。效果很好,并且对于null对象也返回“true”。
.equals()如果为空则抛出NullPointerException
,这会让人讨厌。
此外,假设这是在Java API中,可以安全地假设它是最快的方法。