使用 int 然后递增它比同时做两者慢吗?
Is using an int and then incrementing it slower than doing both simultaneously?
我最近 运行 研究了一些旧的源代码,我注意到这样的模式:
T item = array[index];
index++;
表达成
会不会更快
T item = array[index++];
?直到最近我还认为不会有什么区别,因为我认为 index = index + 1
是 shorthand,所以无论哪种方式,您都会取消引用 index
两次。但是 this post 让我不这么认为;相反,您只会获得一次 index
的值。
这会在性能上产生任何差异(无论多么小),还是现代 JIT 会优化它?
我相当确定在执行其他操作的同一行上增加所述整数被认为是不好的做法。
类似于您提供的示例 (T item = array[index++];
) 最理想的情况是
index++
T item = array[index];
大多数现代语言都会在编译或执行期间进行优化。
像这样简单的东西在编译的时候会直接优化
但是请注意你的例子只是一个错字问题,在这两种情况下 Java 会理解
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
}
总之,编译器和虚拟机将改进您的代码,多考虑选择的算法和数据结构。
我最近 运行 研究了一些旧的源代码,我注意到这样的模式:
T item = array[index];
index++;
表达成
会不会更快T item = array[index++];
?直到最近我还认为不会有什么区别,因为我认为 index = index + 1
是 shorthand,所以无论哪种方式,您都会取消引用 index
两次。但是 this post 让我不这么认为;相反,您只会获得一次 index
的值。
这会在性能上产生任何差异(无论多么小),还是现代 JIT 会优化它?
我相当确定在执行其他操作的同一行上增加所述整数被认为是不好的做法。
类似于您提供的示例 (T item = array[index++];
) 最理想的情况是
index++
T item = array[index];
大多数现代语言都会在编译或执行期间进行优化。 像这样简单的东西在编译的时候会直接优化
但是请注意你的例子只是一个错字问题,在这两种情况下 Java 会理解
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
}
总之,编译器和虚拟机将改进您的代码,多考虑选择的算法和数据结构。