所以有人问++算子比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
issues iload_1
, iconst_1
, iadd
and istore_1
, 而其他的只使用iinc
.
我试图合理化这一点,但我做不到。在这种情况下,编译器是否不够聪明,无法优化字节码?这些是不同的有充分的理由吗?这是由 JIT 处理的吗?除非我解释不正确,否则我似乎永远不应该使用a = a + 1
,我认为这肯定只是一种风格选择。