java - 是否最好预先计算 for 循环的条件语句部分?

标签 java optimization coding-style

例如

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 在每次迭代时都进行加法,这听起来是相当大的开销。但如果编译器足够聪明,可以将添加限制为单次,我希望保持代码简短。

最佳答案

Premature optimization is the root of all evil.

现在不用担心这个。

<小时/>

当您将加法部分从循环中提取出来时,它确实只会被评估一次。有些编译器可能足够聪明,可以对此进行优化,但有些编译器可能不会。

几乎所有 CPU 执行 32 位整数加法所需的时间非常小。如果您使用分析器并发现 for 循环条件确实导致性能问题,那么您应该删除添加内容并看看它是否有帮助。但是,当您甚至没有/还没有发现问题时,担心它是没有意义的。

<小时/>

所以现在,根据你的想法编写代码。例如,对我来说,如果我想“现在我需要重复这个(偏移+计数)次......”,我会写

for (int i = 0 ; i < offset + count ; i++)

如果我在想“现在我需要计算我们循环多少次,然后我会循环那么多次”,那么我会写:

int limit = offset + count;
for (int i = 0 ; i < limit ; i++)

关于java - 是否最好预先计算 for 循环的条件语句部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53976196/

相关文章:

java - 从 jar 文件加载的流程中 View 状态中的相对 View

javascript - 基于本地存储的 react 策略警报

在 R : rows to columns 中 reshape 数据框

java - 我如何知道用户在我的 Android 应用程序上使用 firebase-ui 时是否已经创建了帐户?

java - 创建名称为 'empresasDAO' 的 bean 时出错 : Injection of autowired dependencies failed

java - 从 POST 保存分割上传的文件最终会变成空

php - 通过引用函数传递字符串会加快速度吗? (php)

javascript - 下划线 bindAll,显式方法命名

python - 如何在 Python 中正确声明实例字段

java - 干净的代码、无状态 session bean 和私有(private)状态