a += a--;

运算符优先级如下:
(上一行的优先级大于下一行)

运算符说明Java运算符
分隔符.[](){},;
单目运算符++--~!
强制类型转换运算符(type)
乘法、除法、求余*/%
加法、减法+-
移位运算符<<>>>>>
关系运算符<<=>=>instanceof
等价运算符==!=
按位与&
按位异或^
按位或|
条件与&&
条件或||
三目运算符? :
赋值=+=-=*=/=&=|=^=%=<<=>>=>>>=


public class Test {
    public static void main(String[] args) {
        int a = 1;
        a++;
        a += a--;
        // 4
        System.out.println(a);
        a += ++a;
        // 9
        System.out.println(a);
    }
}

字节码

 0 iconst_1			// 将int型1推送至栈顶
 1 istore_1			// 将栈顶int型值存入第二个本地变量
 2 iinc 1 by 1  	// 将指定int型变量增加1
 5 iload_1			// 将第二个int型本地变量推送到栈顶
 6 iload_1			
 7 iinc 1 by -1		 
10 iadd				// 将栈顶两个int型整数值相加并将结果压入栈顶
11 istore_1
12 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;>
15 iload_1
16 invokevirtual #3 <java/io/PrintStream.println : (I)V>
19 iload_1
20 iinc 1 by 1
23 iload_1
24 iadd
25 istore_1
26 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;>
29 iload_1
30 invokevirtual #3 <java/io/PrintStream.println : (I)V>
33 return


a += a--;

  1. 将赋值运算(+=)两边的值分别推到栈顶,这里左右两边的值分别为2,2;
  2. 本地变量 a 将减少 -1(a--),注意本地变量更改后未使用,IntelliJ IDEA会提示;
  3. 将栈顶两个值(2, 2)相加并保存在本地变量a中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值