大约 7 到 8 年前,我从一本编程书中读到,检查string.length == 0
是检查空字符串的更快方法。我想知道这句话在今天是否仍然适用(或者它是否曾经是真的),因为我个人认为string == ""
它更直接、更易读。我主要处理高级语言,例如 .NET 和 java。
5 回答
在 Java 中进行该测试的最佳方法是
"".equals(string)
因为这处理了字符串为空的情况。
至于哪个更快,我想答案是没关系。两者都非常快,哪一个实际上最快取决于内部编译器实现。
只需使用string.isEmpty()
.
(我拒绝"".equals(string)
,因为如果你有一个空值,那可能表明一个应该使程序崩溃的错误,因为它需要修复。我不能容忍空值。)
通常,字符串对象存储它们的长度,因此获取和比较整数非常快,并且比 equals() 具有更少的内存访问,在最坏的情况下,您必须检查长度并循环字符。
无论如何,现在字符串的 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;
您需要小心使用==
来测试字符串是否相等。如果变量字符串没有被保留,那么测试很有可能会失败。
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
or string.equals("")
。基准测试看哪个更快。
用于"".isEmpty()
检查空字符串。效果很好,并且还为空对象返回“true”。
.equals()NullPointerException
如果它为 null,则抛出 a,这会很烦人。
此外,假设这是在 Java API 中,假设它是最快的方法可能是安全的。