操作数栈和局部变量表

367 阅读1分钟

今天有人问了我这么一道题

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