Java 正在检查string.length==0是否比检查string==”更快&引用;?
大约7-8年前,我从一本编程书中读到,检查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
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;