Java语言中的高效字符串

问题描述:

这句话等于myString != null,myString.length() > 0! myString.equals("")?这是最高效的吗? (Java 1.4)Java语言中的高效字符串

+6

没关系。转移到重要的事情上。 – JohnFx 2010-07-30 22:58:08

+4

@JohnFx:重要的东西,比如生命的意义?无论如何,**的重要性在于,与问题中所述不同,这些**并不等于所有**。 – NoozNooz42 2010-07-30 23:07:17

这些不是全部等效 - 空引用与空字符串不同。

空测试可能是最有效的,因为所有其他人至少需要首先找出引用是否为空。

的,找出最好的办法就是来衡量性能:

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为空作出不同的反应。