在 C++里(++C🐶)
存在前自增效率更高的情况
因为后自增需要先创建临时对象
对于 Java 好像没有看到类似报道?
1
lxilu 2020-07-14 00:37:18 +08:00 via iPhone
看看字节码
|
2
hqweay 2020-07-14 00:43:33 +08:00
Java 的话,编译期优化了。Java 编程思想 有提。
|
3
newtype0092 2020-07-14 00:51:46 +08:00
以前习惯 for 循环里最后一定要++i 不能 i++,现在一边是编译器解释器不断优化,一边是机器性能不断攀升,这种微观细节处的效率优化基本没什么大用了,所以关心的人少了。
|
4
sunny352787 2020-07-14 00:56:01 +08:00
这种细节编译期都优化的很好了,即便没优化这里也不会是瓶颈,也就学术上有点意义
|
5
Jooooooooo 2020-07-14 00:56:39 +08:00
没区别
对 C++ 里有这种区别存疑, 这都哪一年了, 谁写的编译器啊 |
6
lxk11153 2020-07-14 01:27:49 +08:00
需要先创建临时对象?怎么个创建法?
|
7
msg7086 2020-07-14 01:28:04 +08:00 via Android
C++里没区别。你又不是活在 30 年前。
|
8
djoiwhud 2020-07-14 01:33:18 +08:00 via Android
++i 性能好些。会减少一个临时变量存储中间值。参考书本:java151 问
|
9
aureole999 2020-07-14 09:43:20 +08:00
openjdk 14 java 8
不影响逻辑的情况下++i 和 i++编译的字节码完全一致。 Intellij 反编译 class 文件后源代码里的 i++会变为++i |
10
silverwings OP @lxilu #1
@hqweay #2 @jackrelative #8 @aureole999 #9 用 IDEA 反编译了一下 确实所有循环里的 i++、i += 1 、++i 、i = i + 1 都变成了++i 应该是字节码方面是一样的 测试环境是 Java11 |
11
silverwings OP @Jooooooooo #5
@lxk11153 #6 这个 C++的相关介绍里有讲 比如后自增的返回就不是左值 不是对象本身 我也是看到这个才想问 Java 的 而且在几乎所有竞赛里 排名靠前的 C++选手 清一色都是++i 没有任何后自增 参考力扣任何一场周赛 |
12
JinTianYi456 2020-12-18 11:56:12 +08:00
@lxk11153 #6
1. https://bbs.csdn.net/topics/190057598#post-140201403 临时对象应该说的是类似上面这个 2. 然后你再细品如下(但感觉只是自我想当然,编译器不知道会编译成什么样呢! int i=1; System.out.println((i++)+(i++)+i); int j=1; System.out.println((++j)+(++j)+j); |