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

use*_*613 8 .net java string performance

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

Chr*_*ken 7

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

"".equals(string)
Run Code Online (Sandbox Code Playgroud)

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

至于哪个更快,我认为答案是无所谓.两者都非常快,哪一个实际上最快取决于内部编译器实现.


Lou*_*man 6

只是用string.isEmpty().

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


Dan*_*ler 4

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

不管怎样,现在字符串的 equals() 方法也应该首先检查长度,因此它应该与检查长度几乎相同的速度。

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

int n = count;
if (n == anotherString.count) {...}
Run Code Online (Sandbox Code Playgroud)

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

if (len1 != __CFStrLength2(str2, contents2)) return false;
Run Code Online (Sandbox Code Playgroud)

  • “通常”意味着高级编程语言。C确实是低级的,是的,当然,没有长度信息。此外,这个问题被标记为Java,他写道他主要涉及高级编程语言,这表明我们谈论的是高级编程语言。 (2认同)