Java 正在检查string.length==0是否比检查string==”更快&引用;?

Java 正在检查string.length==0是否比检查string==”更快&引用;?,java,.net,string,performance,Java,.net,String,Performance,大约7-8年前,我从一本编程书中读到,检查string.length==0是检查空字符串的一种更快的方法。我想知道这句话今天是否仍然成立(或者它是否曾经是真的),因为我个人认为string==”更直观、可读性更强。我主要处理高级语言,如.NET和java。使用==测试字符串相等性时需要小心。如果变量字符串没有插入,测试很有可能失败 String a = "abc"; String b = a.substring(3); System.out.println("b == \"\": " + (b

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

使用
==
测试字符串相等性时需要小心。如果变量字符串没有插入,测试很有可能失败

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(“”
)。基准测试以查看哪个更快。

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

"".equals(string)
因为这会处理字符串为null的情况

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

使用
“”.isEmpty()
检查空字符串。效果很好,对于空对象也返回“true”

.equals()如果为null,则抛出一个
NullPointerException
,这可能会让人恼火


另外,假设这是在JavaAPI中,可以安全地假设它是最快的方法。

只需使用
string.isEmpty()


(我拒绝使用
“”.equals(string)
,因为如果你有一个空值,这可能表明一个bug会导致程序崩溃,因为它需要修复。我不能容忍空值。)

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

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

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

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

if (len1 != __CFStrLength2(str2, contents2)) return false;

这取决于实现;在.Net中,我倾向于使用string.IsNullOrWhiteSpace()或string.IsNullOrEmpty()通常,string对象存储它们的长度,因此获取和比较整数的速度非常快,并且比equals()具有更少的内存访问在最坏的情况下,您必须检查长度并在字符上循环。无论如何,现在字符串的equals()方法也应该首先检查长度,因此它应该-几乎-与检查长度的速度相同。在Java 6以后的Java字符串中:
public boolean isEmpty(){return value.length==0;}
如果
isEmpty()
是否在此
null
引用上调用?在这种情况下,我更希望出现
NullPointerException
。因为它被认为是“空的”,所以我认为您不理解这一点。在您的示例中,对空字符串调用此方法,如
“”。isEmpty()
。你是想说这个调用:
stringnullstring=null;nullString.isEmpty()
将返回
true
?“通常”按什么标准?例如,对于本机C字符串(以null结尾)“通常”在高级编程语言中的意思是,从来没有这样做过。C是非常低级的,当然,没有长度信息。此外,这个问题被标记为Java,他写道,他主要研究高级编程语言,这表明我们谈论的是高级编程语言。你对此有什么证据?在.NET中,建议使用
string.IsNullOrEmpty()
。你说“现在equals()方法应该首先检查长度”,但你没有提供证据证明事实确实如此。回答不好!我是一名Java和Objective-C开发人员,以下是证据:(
if(len1!=\ucfstrlength2(str2,contents2))返回false;
)-NSString基于CFString;(
if(n==anotherString.count){…}
)+1表示(最佳实践)
if (len1 != __CFStrLength2(str2, contents2)) return false;