今天有人问了我这么一道题
int i = 1; i = i++ + ++i;
考察的是i++
++i
到底理不理解。我来从字节码进行分析
// 将 int 1 压入操作数栈,此时栈顶为1
0: iconst_1
// 弹出栈顶元素1 放置到局部变量表1的位置,此时栈为空,局部变量表slot1放置着1
1: istore_1
// 将局部变量表slot1的值压入操作数栈,此时栈顶为1
2: iload_1
// 对局部变量表slot1的元素进行+1操作。这里操作的是局部变量表,此时栈顶还是1,局部变量表slot1为2
3: iinc 1, 1
// 同理局部变量表slot1 变成3 ,栈顶还是1
6: iinc 1, 1
// 此时操作数栈里有 3 和 1
9: iload_1
// 讲栈顶两个元素进行相加,此时栈里只剩一个元素 为4
10: iadd
// 把栈顶元素弹出,局部变量表slot1为4
11: istore_1
12: return
// 所以i最后=4