i++和++i

基础

public static void main(String[] args) throws Exception {
		int i = 5;
		int a = ++i;
		int j = 6;
		int b = j++;
	}

编译为字节码指令:

   			0: iconst_5							
         1: istore_1										// 将5存放到【局部变量表】下标为1的位置
         2: iinc          1, 1					// 将下标为1的位置的值+1, 即 5+1 = 6
         5: iload_1											// 将下标为1的位置的值放到【操作数栈】
         6: istore_2										// 将【操作数栈】栈顶的值存入【局部变量表】下标为2处
         7: bipush        6							// 将6压入【操作数栈】中
         9: istore_3										// 将【操作数栈】栈顶的值放入【局部变量表】下标为3处
        10: iload_3											// 将下标为3的位置的值放到【操作数栈】
        11: iinc          3, 1					// 下标为3的位置的值+1, 即 6 + 1 = 7
        14: istore        4							// 将【操作数栈】栈顶的值存入【局部变量表】下标为4处
        16: return

对于 x = ++i, ① i所在局部变量表中值+1 ② i压栈 ③ 栈顶值存进x对应的局部变量表位置

iinc 1,1 
iload_1
istore_2

对于 x = i++, ① i压栈 ② i所在局部变量表中值 +1 ③ 栈顶值存进x对应的局部变量表位置

iload_3 
iinc 3,1
istore 4 

扩展

public static void main(String[] args) throws Exception {
		int i = 5;
		i = i++;
  	System.out.println(i);
	}

这里i值为多少?

答案是5.

分析:

对应上面的顺序 , ① i压栈 (值为5) ② i 所在局部变量表中值+1(5 + 1 = 6) ③ 栈顶值存进i对应的局部变量表位置 (又将6覆盖成了5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值