代码之家  ›  专栏  ›  技术社区  ›  WSBT

检查字符串长度==0是否仍然比检查字符串==“”快?

  •  10
  • WSBT  · 技术社区  · 13 年前

    大约7-8年前,我从一本编程书中读到 string.length == 0 是检查空字符串的更快方法。我想知道这个说法今天是否仍然成立(或者它是否曾经是真的),因为我个人认为 string == "" 更直观,可读性更强。我主要处理.NET和java等高级语言。

    5 回复  |  直到 13 年前
        1
  •  7
  •   Chris Gerken    13 年前

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

    "".equals(string)
    

    因为它处理字符串为null的情况。

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

        2
  •  7
  •   Louis Wasserman    13 年前

    只需使用 string.isEmpty()

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

        3
  •  4
  •   Daniel Mühlbachler-P.    13 年前

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

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

    等于中的一部分 Java语言 (http://www.docjar.com/html/api/java/lang/String.java.html)以下为:

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

    等于中的一部分 目标-C (http://www.opensource.apple.com/source/CF/CF-476.15/CFString.c)-NSString基于CFString:

    if (len1 != __CFStrLength2(str2, contents2)) return false;
    
        4
  •  1
  •   Ted Hopp    13 年前

    你需要小心使用 == 以测试字符串是否相等。如果变量字符串没有被插入,那么测试很有可能失败。

    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("") 。进行基准测试,看看哪个更快。

        5
  •  -1
  •   Jagger    13 年前

    使用 "".isEmpty() 以检查是否有空字符串。效果很好,而且还为null对象返回“true”。

    String.isEmpty()

    .equals()引发 NullPointerException 如果它为null,这可能会很烦人。

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