所以有人在不久前问过
Is the ++ operator more efficient than 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;
}
}
输出:
例:
public class SO_Test
{
public static void main(String[] args)
{
int a = 1;
a = a + 1;
a++;
a += 1;
++a;
}
}
输出:
简而言之,a = a 1发出iload_1,iconst_1,iadd和istore_1,而其他人只使用iinc.
我试图将其合理化,但我无法做到.在这种情况下,编译器是不是足够智能来优化字节码?这些是不同的有充分理由吗?这是由JIT处理的吗?除非我错误地解释这个,否则我似乎永远不应该使用a = a 1,我认为这肯定只是一种风格选择.