【发布时间】:2018-12-30 08:28:09
【问题描述】:
例如
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 在每次迭代中都进行添加,这听起来像是相当大的开销。但如果编译器足够聪明,可以将添加限制为单次,我想保持我的代码简短。
【问题讨论】:
-
您需要在每次迭代时评估它。如果你评估一次它会导致无限循环
-
任何体面的优化器都可能为您做到这一点。但是,由于这是一个非常小的“文本添加”,您不妨自己做并消除所有疑虑(以及在优化下编译代码的需要,这会产生(可能是不希望的)使调试更加困难的效果)。
-
wardziniak//我的意思是条件测试的附加部分,而不是条件测试本身。是的,这会造成无限循环
-
您想知道这样做
int limit = count + offset;是否比遍历offset + count更好。对于一个小的添加,它甚至不应该是重要的。相反,如果您的问题通过getOffset() + getCount()循环比通过offset + count循环更好,那么这取决于您的编程逻辑。这些方法是否在每次被调用时返回不同的值,或者它们是否执行了一些繁重的操作但返回相同的值? -
更重要的是让你的变量
final,这样读者可以很容易地看到边界没有改变。
标签: java optimization coding-style