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中。
### 用法 `+=` 和 `-=` 操作符在多种编程语言中被广泛使用,它们是复合赋值操作符,能够简化代码。 #### Python 在 Python 中,`+=` 和 `-=` 操作符可用于数字类型(如整数、浮点数)、列表、字符串等。 ```python # 数字类型 a = 5 a += 3 # 等价于 a = a + 3 print(a) # 输出 8 b = 10 b -= 4 # 等价于 b = b - 4 print(b) # 输出 6 # 列表类型 list1 = [1, 2, 3] list1 += [4, 5] # 等价于 list1 = list1 + [4, 5] print(list1) # 输出 [1, 2, 3, 4, 5] # 字符串类型 str1 = "Hello" str1 += " World" # 等价于 str1 = str1 + " World" print(str1) # 输出 "Hello World" ``` #### JavaJava 中,`+=` 和 `-=` 操作符主要用于基本数据类型和一些引用类型(如包装类)。 ```java public class Main { public static void main(String[] args) { int num1 = 5; num1 += 3; // 等价于 num1 = num1 + 3 System.out.println(num1); // 输出 8 int num2 = 10; num2 -= 4; // 等价于 num2 = num2 - 4 System.out.println(num2); // 输出 6 } } ``` #### C++ 在 C++ 中,`+=` 和 `-=` 操作符同样用于基本数据类型和自定义类型(通过运算符重载)。 ```cpp #include <iostream> int main() { int num1 = 5; num1 += 3; // 等价于 num1 = num1 + 3 std::cout << num1 << std::endl; // 输出 8 int num2 = 10; num2 -= 4; // 等价于 num2 = num2 - 4 std::cout << num2 << std::endl; // 输出 6 return 0; } ``` ### 原理 `+=` 和 `-=` 操作符的原理本质上是先进行加法或减法运算,然后将结果赋值给左边的变量。 以 `+=` 为例,`a += b` 实际上是 `a = a + b`。对于 `-=`,`a -= b` 实际上是 `a = a - b`。 在 Java 中,`++` 操作符是一个复合操作,包含读取变量值、增加、存储回内存三个步骤 [^3]。`+=` 和 `-=` 操作符也类似,会涉及到读取、运算和存储的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值