2016-10-28 20 views
2

說我有(JAVA)重新計算條件或不

String word = args[0]; 
for (int i = 0; i < word.length(); i++) {} 

我知道一個字符串。長度()方法不一定是昂貴的,但只是爲了確認:這會重新計算字。 for循環的每次傳遞的length()?它會更好定義

int length = word.length; 

,並使用我<長度作爲循環的條件?

回答

3

String的長度爲不是計算每次您撥打word.length()。這是因爲String類將長度存儲爲創建時的字段。完成後

public int length() { 
    return value.length; 
} 

而且這樣做

int length = word.length(); 
for (int i = 0; i < length; i++) {} 

將具有相同的性能:

如果你看到java.lang.Stringlength()方法的代碼,它只包含此像這樣:

int length = word.length(); 
for (int i = 0; i < word.length(); i++) {} 


還要注意的是,前者的代碼將循環,基本上消除了對方法調用的需要外呼叫。但是,這將是一個微不足道的性能提升。

+4

另外,有一個很好的概率方法會內聯。 – TheLostMind

2

Java字符串是恆定的,並且length()方法實現得很快(與c中的strlen不同)。該代碼將會很好。

這就是說,避免這種恐懼的一種方法是數到零。它的速度稍微快一點,因爲你只需要調用一個方法,比較0就比非零更便宜。 Marginally便宜。

for (int i = word.length() - 1; i >= 0; --i) ... 

另一種是使用CharacterIterator,但它是矯枉過正這一點:

CharacterIterator iter = new StringCharacterIterator(word); 
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) ...