使用整型数然后对其加1比同时执行这两个操作要慢

本文关键字:执行 操作 两个 然后 整型 | 更新日期: 2023-09-27 18:02:22

我最近偶然看到一些旧的源代码,我注意到这样一个模式:

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

表示为

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

?直到最近,我都认为没有区别,因为我认为它是index = index + 1的简写,所以无论哪种方式,你都会对index进行两次解引用。但这篇文章让我有了不同的想法;相反,您将只获得一次index的值。

这会在性能上产生任何差异(无论多么小)吗?或者现代jit会优化这一点吗?

使用整型数然后对其加1比同时执行这两个操作要慢

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

但是注意你的例子只是一个错字问题,在这两种情况下Java会理解的T item = array[index++]; by:

  • 获取索引位置的对象
  • 添加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
}

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

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

类似您提供的示例(T item = array[index++];)的内容最好变成类似

的内容。
index++
T item = array[index];