2016-10-28 8 views
2

言ってやるが、私は(Javaの)再計算ループの中に条件か

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

私は、文字列の.LENGTH()メソッドは、必ずしも高価なないですけど、ちょうど確認する必要がありますでしょう、この再計算言葉。 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.Stringクラスのlength()メソッドのコードが表示されている場合

は、それがこれだけ含まれていますこのように:

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


も前者のコードは基本的にメソッド呼び出しのための必要性を除去するループの外側の呼を移動させることに注意してください。しかし、これは些細なパフォーマンスの向上になります。

+4

また、この方法は、インライン化されますことを良い可能性があります。 – TheLostMind

2

Javaの文字列は定数で、length()メソッドは高速に実装されています(cのstrlenとは異なります)。そのコードは問題ありません。

つまり、この恐れを避けるための方法の1つはゼロになります。単一のメソッド呼び出しのみを行い、0との比較は非ゼロより安価であるため、わずかに高速です。 マージン安い。

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()) ...