例如
int offset = getOffset();
int count = getCount();
int limit = count + offset;
for (int i; i < limit; i++) {}
比
更可取int offset = getOffset();
int count = getCount();
for (int i; i < offset + count; i++) {}
如果Java VM在每次迭代中都执行添加操作,那么这听起来很麻烦。但是,如果编译器足够聪明,可以将添加次数限制为一次,那么我想使代码简短。
答案 0 :(得分:6)
过早的优化是万恶之源。
现在不用担心。
当您从循环中提取加法部分时,它实际上只会被评估一次。有些编译器可能也足够聪明,可以对其进行优化,但有些可能不会。
几乎所有CPU进行32位整数加法的时间都非常短。如果您使用了探查器,并且发现for循环条件确实是 会导致性能问题,那么您应该删除附加内容,看看是否有帮助。但是,即使您没有/没有发现问题,也不必担心。
因此,现在,根据您的想法编写代码。例如,对我来说,如果我想“现在我需要重复(偏移+计数)次...”,我会写
for (int i = 0 ; i < offset + count ; i++)
如果我想“现在我需要计算循环次数,然后我将循环多次”,那么我会写:
int limit = offset + count;
for (int i = 0 ; i < limit ; i++)