所以有人问过++运算符比a = a + 1更有效吗?前阵子.我以为我之前分析了这个,并且最初说a = a + 1和增量运算符之间没有区别++.事实证明,a++,++a和a += 1所有编译到相同的字节,但a = a + 1确实没有,因为可以看到下面:
public class SO_Test
{
public static void main(String[] args)
{
int a = 1;
a++;
a += 1;
++a;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:

例:
public class SO_Test
{
public static void main(String[] args)
{
int a = 1;
a = a + 1;
a++;
a += 1;
++a;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:

总之,a = a + 1问题iload_1,iconst_1,iadd和istore_1,而其他人只能使用iinc.
我试图将其合理化,但我无法做到.在这种情况下,编译器是不是足够智能来优化字节码?这些是不同的有充分理由吗?这是由JIT处理的吗?除非我正确地解释这个,否则我似乎永远不会使用a = a + 1,我认为这肯定只是一种风格选择.