10

大约 7 到 8 年前,我从一本编程书中读到,检查string.length == 0是检查空字符串的更快方法。我想知道这句话在今天是否仍然适用(或者它是否曾经是真的),因为我个人认为string == ""它更直接、更易读。我主要处理高级语言,例如 .NET 和 java。

4

5 回答 5

7

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

"".equals(string)

因为这处理了字符串为空的情况。

至于哪个更快,我想答案是没关系。两者都非常快,哪一个实际上最快取决于内部编译器实现。

于 2012-09-25T20:02:03.903 回答
7

只需使用string.isEmpty().

(我拒绝"".equals(string),因为如果你有一个空值,那可能表明一个应该使程序崩溃的错误,因为它需要修复。我不能容忍空值。)

于 2012-09-25T22:18:50.223 回答
4

通常,字符串对象存储它们的长度,因此获取和比较整数非常快,并且比 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;
于 2012-10-02T17:28:23.000 回答
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() == 0or string.equals("")。基准测试看哪个更快。

于 2012-09-25T19:58:56.587 回答
-1

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

String.isEmpty()

.equals()NullPointerException如果它为 null,则抛出 a,这会很烦人。

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

于 2012-09-25T20:06:10.857 回答