說我有(JAVA)重新計算條件或不
String word = args[0];
for (int i = 0; i < word.length(); i++) {}
我知道一個字符串。長度()方法不一定是昂貴的,但只是爲了確認:這會重新計算字。 for循環的每次傳遞的length()?它會更好定義
int length = word.length;
,並使用我<長度作爲循環的條件?
說我有(JAVA)重新計算條件或不
String word = args[0];
for (int i = 0; i < word.length(); i++) {}
我知道一個字符串。長度()方法不一定是昂貴的,但只是爲了確認:這會重新計算字。 for循環的每次傳遞的length()?它會更好定義
int length = word.length;
,並使用我<長度作爲循環的條件?
String
的長度爲不是計算每次您撥打word.length()
。這是因爲String
類將長度存儲爲創建時的字段。完成後
public int length() {
return value.length;
}
而且這樣做
int length = word.length();
for (int i = 0; i < length; i++) {}
將具有相同的性能:
如果你看到java.lang.String
類length()
方法的代碼,它只包含此像這樣:
int length = word.length();
for (int i = 0; i < word.length(); i++) {}
還要注意的是,前者的代碼將循環,基本上消除了對方法調用的需要外呼叫。但是,這將是一個微不足道的性能提升。
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()) ...
另外,有一個很好的概率方法會內聯。 – TheLostMind