重新计算for循环中的条件

时间:2016-10-28 05:14:57

标签: java

说我有(Java)

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

我知道字符串上的.length()方法并不一定代价高昂,但只是为了确认:这会在for循环的每次传递中重新计算word.length()吗?定义

会更好吗?
int length = word.length;

并使用i&lt;长度作为循环中的条件?

2 个答案:

答案 0 :(得分:3)

每次拨打String时,word.length()的长度都是。那是因为String类在创建时将长度存储为字段。

如果您看到length()java.lang.String方法的代码,则只包含以下内容:

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

这样做

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

完成后会有相同的表现:

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


还要注意前一个代码将调用移到循环外部,基本上不需要方法调用。但是,这将是一个微不足道的性能提升。

答案 1 :(得分:2)

Java字符串是常量,并且length()方法实现得很快(与c中的strlen不同)。那段代码没问题。

尽管如此,避免这种恐惧的一种方法是数到零。它稍快一点,因为你只进行一次方法调用,比较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()) ...