1.运算符
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 三目运算符
2.算术运算符
运算符 | 运算 |
---|---|
+ | 正号 |
- | 负号 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模(取余) |
++ | 自增 |
– | 自减 |
+ | 字符串连接 |
注意:
- 取模运算(%)结果的符号与被模数的符号相同
int m = -12; // 被模数 int n = 5; // 模数 int res = m % n; // -2
- 自增(++) / 自减(–)不会改变变量本身的数据类型
short s = 5; s++; // s = s + 1; // 编译错误,结果应为 int 型
- 自增(++) / 自减(–)是以二进制实现的
byte b = 127; // b 的补码为:01111111,加1后为:10000000(10进制 -128) b++; System.out.println(b); // -128
3.赋值运算符
运算符 | 运算 |
---|---|
= | 赋值 |
扩展赋值运算符:+=、-=、*=、/=、%=
注意:
- +=(…) 不改变变量本身的数据类型
short s = 12; s += 2; // s = s + 2; // 编译错误,结果应为 int 型 int i = 12; i *= 0.1; // i: int 型 System.out.println(i); // 1
3.关系运算符
运算符 | 运算 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
instanceof | 检查是否是类的对象 |
注意:
- 关系运算符的结果都为 boolean 型
>、<、>=、<=
只能使用在数值类型的数据之间- ==、!= 不仅可以使用在数值类型的数据之间,还可以使用在引用数据类型的变量之间。
4.逻辑运算符
运算符 | 运算 |
---|---|
& | 逻辑与 |
&& | 短路与 |
| | 逻辑或 |
|| | 短路或 |
! | 逻辑非 |
^ | 逻辑异或 |
注意:
- 区分 & 和 &&
相同点:
运算结果相同,当运算符左边为 true 时,二者都会执行运算符右边的运算。
不同点:
当运算符左边为 false 时,& 会执行运算符右边的运算,&& 则不会。boolean b1 = false; int num1 = 10; if (b1 & (num1++ > 0)) { // ... } System.out.println("num1: " + num1); // 11 boolean b2 = false; int num2 = 10; if (b2 && (num2++ > 0)) { // ... } System.out.println("num2: " + num2); // 10
- 区分 | 和 ||
相同点:
运算结果相同,当运算符左边为 false 时,二者都会执行运算符右边的运算。
不同点:
当运算符左边为 true 时,| 会执行运算符右边的运算,|| 则不会。boolean b1 = true; int num1 = 10; if (b1 | (num1++ > 0)) { // } System.out.println("num1: " + num1); // 11 boolean b2 = true; int num2 = 10; if (b2 || (num2++ > 0)) { // } System.out.println("num2: " + num2); // 10
6.位运算符
运算符 | 运算 | 细节 |
---|---|---|
<< | 左移 | 高位丢弃,空位补0 |
>> | 右移 | 最高位是0,空位补0; 最高位是1,空位补1 |
>>> | 无符号右移 | 不论最高位是1还是0,空位都补0 |
& | 与运算 | 二进制位进行 & 运算,只有 1 & 1 结果是1,其它为0 |
| | 或运算 | 二进制位进行| 运算,只有 0| 0 结果是0,其它为1 |
^ | 异或运算 | 相同为0,不同为1 |
~ | 取反运算 | 按补码各位取反(包括最高位) |
注意:
- 位运算是直接对整数的二进制进行的运算
7.三目运算符
运算符 |
---|
? : |
注意:
- 三目运算符可以嵌套使用