2010-07-30 86 views
0

這句話等於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

回答

8

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

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

的,找出最好的辦法就是來衡量性能:

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稍微更新的版本,所以您應該自己運行測試以查看您是否得到相同的結果。

1

它們不等價。如果myString爲空,則第二個將拋出NullPointerException。 (myString. = null & & myString.length()!= 0)可能比(「」.equals(myString))稍微更有效率。但是他們仍然會對myString爲空作出不同的反應。