i++

代码:

int i = 1;
System.out.println(i++);

字节码:

iconst_1 // 把常量 1 加载到栈中
istore_1 // 把栈的元素弹出并赋值给局部变量i

iload_1 // 把局部变量 i 的值加载到栈中
iinc 1 by 1 // 把局部变量中 i的值加1,此时局部变量i的值为2
invokevirtual // 把栈的元素调用过来
return // return输出

++i

代码:

int i = 1;
System.out.println(++i);

字节码:

iconst_1 // 把常量 1 加载到栈中
istore_1 // 把栈的元素弹出并赋值给局部变量i

iinc 1 by 1    // 把局部变量中 i的值加1,此时局部变量i的值为2
iload_1        // 把局部变量 i 的值加载到栈中
invokevirtual  // 把栈的元素调用过来
return         // return输出

总结:

i++是先把值放入栈中,然后进行+1操作。
++i是先进行+1操作,然后在放入栈中。

思考以下代码结果:

代码:

int i = 1;
System.out.println(i++ + ++i + i++ + ++i);
System.out.println(i);