当前位置: 首页 > 面试题库 >

在Java for循环中,++ i真的比i ++快吗?

艾自强
2023-03-14
问题内容

在Java中,我通常会进行如下所示的for循环:

for (int i = 0; i < max; i++) {
   something
}

但是最近一位同事打了这样的字:

for (int i = 0; i < max; ++i) {
   something
}

他说后者会更快。真的吗?


问题答案:

不,那不是真的。您可以通过定时每个循环进行大量迭代来衡量性能,但是我可以肯定它们会是相同的。

神话来自C,它++i被认为比C
更快,i++因为前者可以通过增加i然后返回来实现。后者可以通过将i的值复制到临时变量,递增i,然后返回临时变量的方式来实现。第一个版本不需要制作临时副本,因此许多人认为它会更快。但是,如果将表达式用作语句,现代C编译器可以优化删除临时副本,以便在实践中没有区别。



 类似资料:
  • 问题内容: 以下Java程序平均需要0.50秒至0.55秒的时间运行: 如果我替换为,则需要0.60到0.65秒的时间来运行。怎么会? 我对该程序的每个版本运行了15次,两次交替运行。结果如下: 最快的运行时间比最慢的运行时间长。如果它们具有相同的效率,则发生这种情况的可能性将小于。 问题答案: 字节码的顺序略有不同。 : vs : 乍看之下,这没有什么区别;如果有的话,第二个版本更理想,因为它减

  • 问题内容: 我不明白为什么这个职位增加方程不增加。我以为在+=操作之后,该值将增加1,然后围绕i的第二次将具有1值。但是输出是一个零零的无限循环。有谁能解释为什么“ i”不增加。 问题答案: @ njzk2的答案是正确的,但指出正确的 原因 很有用。 还有其他可能性-例如,为什么Java在分配后不执行postincrement运算符?(答案:因为那不是Java语言设计者选择的) Java语言规范第

  • 问题内容: 我今天发现了一件奇怪的事情,想知道是否有人可以阐明其中的区别? 运行完每个循环后,没有改变,但是在每个元素中添加了一个。我实际上使用该版本在循环内写入初始化的NumPy数组。 问题答案: 不同之处在于,一个修改数据结构本身(就地操作),而另一个仅 重新分配 变量。 仅出于完整性考虑: 是 不是总是 做就地操作,有(至少)三种例外情况: 如果 没有实现 的则方法的声明仅仅是一个速记。如果

  • 我在英国大学考试中遇到了这个难题。 考虑以下循环,到目前为止,其中i未声明: 找到的定义,它在这个循环之前,这样time循环就会永远继续。 下一个问题,对该代码段提出了相同的问题: 对我来说是显而易见的。当然,在另一种情况下,它是NaN,但我真的被前一种情况困住了。这与溢出有关吗?是什么导致这样的循环在Java中永远循环?

  • } 链接:https://www.hackerrank.com/challenges/java-string-compare/problem