使用int然后递增它比同时执行两者更慢吗?

时间:2015-07-11 03:22:45

标签: java c# performance increment jit

我最近遇到了一些旧的源代码,我注意到了这样的模式:

T item = array[index];
index++;

将它表达为

会更快吗?
T item = array[index++];

?直到最近,我认为不会有区别,因为我认为它是index = index + 1的简写,所以无论哪种方式,你都要取消引用index两次。但是this post让我想到了;相反,您只能获得index一次的价值。

这会产生性能上的任何差异(无论多么小),还是现代JIT会优化它?

2 个答案:

答案 0 :(得分:3)

大多数现代语言将在编译或执行期间进行优化。 像这样的简单事情将在编译期间直接优化。

但请注意,您的例子只是一个错字问题,在Java会理解的2个案例中 T item = array[index++];

  • 在索引位置获取对象
  • 将1添加到索引

与写作相同的东西

T item = array[index];
index++;

(但与T item = array[++index];相同的是:

index++;
T item = array[index];

编辑: 我还可以补充说,循环也得到了改进,编译或执行时间 例如C或C ++

for(int i = 0; i < 1000; i++) {
    t[i] = 0
}

将等同于

for(int i = 0; i < 1000; i++) {
   *(t++) = 0
}

总之,编译器和虚拟机将改进您的代码,更多地考虑所选择的算法和数据结构。

答案 1 :(得分:1)

我相当肯定在你执行其他操作的同一行上增加所述整数被认为是不好的做法。

您提供的示例(T item = array[index++];)之类的内容最适合

index++
T item = array[index];