(常见)
-
++i
(前置递增):- 先将变量
i
的值增加 1,然后再使用变量i
。 - 示例:
int i = 5; int j = ++i; // i 先加 1 变为 6,然后 j 赋值为 6 System.out.println("i: " + i); // 输出 6 System.out.println("j: " + j); // 输出 6
- 先将变量
-
i++
(后置递增):- 先使用变量
i
,然后再将变量i
的值增加 1。 - 示例:
int i = 5; int j = i++; // j 先赋值为 5,然后 i 加 1 变为 6 System.out.println("i: " + i); // 输出 6 System.out.println("j: " + j); // 输出 5
- 先使用变量
+=
(加和赋值)
意义: 将变量的当前值与指定值相加,然后将结果赋值给该变量。
示例:
int a = 5; a += 3; // 等同于 a = a + 3;
System.out.println(a); // 输出 8
-=
(减和赋值)
意义: 将变量的当前值减去指定值,然后将结果赋值给该变量。
示例:
int b = 10; b -= 4; // 等同于 b = b - 4;
System.out.println(b); // 输出 6
*=
(乘和赋值)
意义: 将变量的当前值与指定值相乘,然后将结果赋值给该变量。
示例:
int c = 7; c *= 2; // 等同于 c = c * 2;
System.out.println(c); // 输出 14
/=
(除和赋值)
意义: 将变量的当前值除以指定值,然后将结果赋值给该变量。
示例:
int d = 20;
d /= 5; // 等同于 d = d / 5;
System.out.println(d); // 输出 4
%=
(取模和赋值)
意义: 将变量的当前值与指定值进行取模运算,然后将结果赋值给该变量。
示例:
int e = 13;
e %= 3; // 等同于 e = e % 3;
System.out.println(e); // 输出 1
(不常见)
&=
(按位与和赋值)
意义: 对变量的当前值和指定值进行按位与运算,然后将结果赋值给该变量。
示例:
int f = 12; // 12 的二进制为 1100
f &= 5; // 等同于 f = f & 5;
System.out.println(f); // 输出 4
不使用复合赋值运算符:
int f = 12; // 12 的二进制为 1100
f = f & 5; // 5 的二进制为 0101, 1100 & 0101 = 0100 (即 4)
System.out.println(f); // 输出 4
|=
(按位或和赋值)
意义: 对变量的当前值和指定值进行按位或运算,然后将结果赋值给该变量。
示例:
int g = 12; // 12 的二进制为 1100
g |= 5; // 等同于 g = g | 5;
System.out.println(g); // 输出 13
不使用复合赋值运算符:
int g = 12; // 12 的二进制为 1100
g = g | 5; // 5 的二进制为 0101, 1100 | 0101 = 1101 (即 13)
System.out.println(g); // 输出 13
^=
(按位异或和赋值)
意义: 对变量的当前值和指定值进行按位异或运算,然后将结果赋值给该变量。
示例:
int h = 12; // 12 的二进制为 1100
h ^= 5; // 等同于 h = h ^ 5;
System.out.println(h); // 输出 9
不使用复合赋值运算符:
int h = 12; // 12 的二进制为 1100
h = h ^ 5; // 5 的二进制为 0101, 1100 ^ 0101 = 1001 (即 9)
System.out.println(h); // 输出 9
<<=
(左移和赋值)
意义: 将变量的当前值按位左移指定的位数,然后将结果赋值给该变量。
示例:
int i = 3; // 3 的二进制为 0011
i <<= 2; // 等同于 i = i << 2;
System.out.println(i); // 输出 12
不使用复合赋值运算符:
int i = 3; // 3 的二进制为 0011
i = i << 2; // 左移 2 位, 0011 变为 1100 (即 12)
System.out.println(i); // 输出 12
>>=
(右移和赋值)
意义: 将变量的当前值按位右移指定的位数,然后将结果赋值给该变量。
示例:
int j = 12; // 12 的二进制为 1100
j >>= 2; // 等同于 j = j >> 2;
System.out.println(j); // 输出 3
不使用复合赋值运算符:
int j = 12; // 12 的二进制为 1100
j = j >> 2; // 右移 2 位, 1100 变为 0011 (即 3)
System.out.println(j); // 输出 3
>>>=
(无符号右移和赋值)
意义: 将变量的当前值按位无符号右移指定的位数,然后将结果赋值给该变量。无符号右移将高位用零填充。
示例:
int k = -16; // -16 的二进制表示为 11111111111111111111111111110000
k >>>= 2; // 等同于 k = k >>> 2;
System.out.println(k); // 输出 1073741820
不使用复合赋值运算符:
int k = -16; // -16 的二进制表示为 11111111111111111111111111110000
k = k >>> 2; // 无符号右移 2 位, 结果为 00111111111111111111111111111100 (即 1073741820)
System.out.println(k); // 输出 1073741820
总结
复合赋值运算符将算术运算和赋值运算结合在一起,使代码更加简洁。在不使用复合赋值运算符的情况下,可以通过普通赋值运算符和相应的算术运算符实现相同的效果。理解这些运算符及其等效的普通表达方式,有助于提高代码的可读性和可维护性。