Java语言中的高效字符串
问题描述:
这句话等于myString != null
,myString.length() > 0
和! myString.equals("")
?这是最高效的吗? (Java 1.4)Java语言中的高效字符串
答
这些不是全部等效 - 空引用与空字符串不同。
空测试可能是最有效的,因为所有其他人至少需要首先找出引用是否为空。
的,找出最好的办法就是来衡量性能:
public static void main(String[] args)
{
String myString = "foo";
int a = 0;
for (int i = 0; i < 100000000; ++i)
{
//if (myString != null)
//if (myString.length() > 0)
if (!myString.equals(""))
{
a++;
}
}
System.out.println(a);
}
结果:
myString != null : 0.61s myString.length() > 0 : 0.67s !myString.equals("") : 2.82s
所以空测试和长度测试采取几乎相同的时间量,但使用空字符串进行相等性测试的时间要长四倍以上。请注意,我测试了比您使用的Java稍微更新的版本,所以您应该自己运行测试以查看您是否得到相同的结果。
答
它们不等价。如果myString为空,则第二个将抛出NullPointerException。 (myString. = null & & myString.length()!= 0)可能比(“”.equals(myString))稍微更有效率。但是他们仍然会对myString为空作出不同的反应。
没关系。转移到重要的事情上。 – JohnFx 2010-07-30 22:58:08
@JohnFx:重要的东西,比如生命的意义?无论如何,**的重要性在于,与问题中所述不同,这些**并不等于所有**。 – NoozNooz42 2010-07-30 23:07:17