使用整型数然后对其加1比同时执行这两个操作要慢
本文关键字:执行 操作 两个 然后 整型 | 更新日期: 2023-09-27 18:02:22
我最近偶然看到一些旧的源代码,我注意到这样一个模式:
T item = array[index];
index++;
表示为
会更快吗?T item = array[index++];
?直到最近,我都认为没有区别,因为我认为它是index = index + 1
的简写,所以无论哪种方式,你都会对index
进行两次解引用。但这篇文章让我有了不同的想法;相反,您将只获得一次index
的值。
这会在性能上产生任何差异(无论多么小)吗?或者现代jit会优化这一点吗?
大多数现代语言将在编译或执行时进行优化。像这样简单的事情将在编译期间直接优化。
但是注意你的例子只是一个错字问题,在这两种情况下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];