use*_*613 8 .net java string performance
我在大约7 - 8年前从一本编程书中读到,检查string.length == 0是检查空字符串的更快方法.我想知道今天这个陈述是否仍然适用(或者它是否真的存在),因为我个人认为string == ""更直接,更具可读性.我主要处理.NET和java等高级语言.
在Java中进行该测试的最佳方法是
"".equals(string)
Run Code Online (Sandbox Code Playgroud)
因为它处理string为null的情况.
至于哪个更快,我认为答案是无所谓.两者都非常快,哪一个实际上最快取决于内部编译器实现.
只是用string.isEmpty().
(我拒绝,"".equals(string)因为如果你有一个null,那可能表示一个错误会导致程序崩溃,因为它需要修复.我不能容忍null.)
通常,字符串对象存储它们的长度,因此获取和比较整数非常快,并且比 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)