一、运算符的分类
1. 按功能分类
| 分类 | 包含运算符 |
|---|---|
| 算术运算符(7 个) | +、-、*、/、%、++、-- |
| 赋值运算符(12 个) | =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^= |
| 比较(关系)运算符(6 个) | >、>=、<、<=、==、!= |
| 逻辑运算符(6 个) | &、|、^、!、&&、| |
| 位运算符(7 个) | &、|、^、~、<<、>>、>>> |
| 条件运算符(1 个) | (条件表达式)?结果1:结果2 |
| Lambda 运算符(1 个) | ->(暂不讲解) |
2. 按操作数个数分类
| 分类 | 说明 |
|---|---|
| 一元运算符(单目) | 操作数为 1 个,如:正号(+)、负号(-)、++、--、!、~ |
| 二元运算符(双目) | 操作数为 2 个,除一元和三元运算符外均为此类 |
| 三元运算符(三目) | 操作数为 3 个,仅(条件表达式)?结果1:结果2 |
二、算术运算符
1. 基本用法

2. 关键注意点
+两侧至少有一个字符串时,功能为拼接(结果为字符串),否则为加法。- 整数除法(如
int间除法)仅保留整数部分,无四舍五入。 ++/--单独使用时,前 / 后操作结果一致;与其他操作结合时,前操作先变更值再运算,后操作先运算再变更值。
3. 案例
// 取余与除法示例
int num = 187;
int bai = num / 100; // 百位:1(187/100=1)
int shi = num % 100 / 10; // 十位:8(187%100=87,87/10=8)
int ge = num % 10; // 个位:7
// 自增示例
int x = 3;
int y = x++; // y=3,x=4(后++:先赋值再自增)
int z = ++x; // z=5,x=5(前++:先自增再赋值)
三、赋值运算符
1. 基本用法
| 运算符 | 功能说明 | 示例 |
|---|---|---|
= |
基本赋值(支持连续赋值) | int a = 10; int b = a; int c = d = 20; |
+= |
左值 = 左值 + 右值(自动类型转换) | int m = 10; m += 5; // m=15;short s=3; s+=2; // 等价于s=(short)(s+2) |
-= |
左值 = 左值 – 右值(自动类型转换) | int n=5; n-=3; // n=2 |
*= |
左值 = 左值 × 右值(自动类型转换) | int p=4; p*=2; // p=8 |
/= |
左值 = 左值 ÷ 右值(自动类型转换) | int q=10; q/=3; // q=3 |
%= |
左值 = 左值 % 右值(自动类型转换) | int r=7; r%=3; // r=1 |
2. 关键注意点
- 扩展赋值运算符(
+=等)会自动进行强制类型转换,避免编译报错(如short类型运算)。 - 连续赋值需保证变量已声明(如
int a,b; a = b = 10;合法)。
四、比较(关系)运算符
1. 基本用法

2. 关键注意点
- 结果只能是
true或false。 - 不可将
==误写为=(=是赋值,返回值为右值)。 - 引用类型比较(如
String)需注意:==比较地址,equals()方法比较内容(后续讲解)。
3. 示例
int a = 10, b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
boolean c = true, d = false;
System.out.println(c == d); // false
五、逻辑运算符(操作数为 boolean 类型)
1. 基本用法
| 运算符 | 功能说明 | 特点 |
|---|---|---|
& |
逻辑与(全 true 则 true,否则 false) | 非短路:两边都执行 |
&& |
短路与(全 true 则 true,否则 false) | 短路:左边为 false 时,右边不执行 |
| |
逻辑或(全 false 则 false,否则 true) | 非短路:两边都执行 |
| |
短路或(全 false 则 false,否则 true) | 短路:左边为 true 时,右边不执行 |
^ |
逻辑异或(两边不同则 true,相同则 false) | – |
! |
逻辑非(true 变 false,false 变 true) | 一元运算符 |
2. 示例
int x = 10;
// 短路与:左边为false,右边x++不执行
System.out.println(3 > 5 && x++ > 0); // false
System.out.println(x); // 10(x未自增)
// 非短路与:两边都执行
System.out.println(3 > 5 & x++ > 0); // false
System.out.println(x); // 11(x自增)
// 逻辑异或
System.out.println(true ^ false); // true
System.out.println(true ^ true); // false
六、位运算符(操作数为整数,按二进制位运算)
1. 基本用法
| 运算符 | 功能说明 | 示例(以 byte 类型为例) |
|---|---|---|
& |
按位与(对应位均为 1 则为 1,否则 0) | 6 & 3 = 2(00000110 & 00000011 = 00000010) |
| |
按位或(对应位有 1 则为 1,否则 0) | 6 | 3 = 7(00000110 | 00000011 = 00000111) |
^ |
按位异或(对应位不同则为 1,相同则 0) | 6 ^ 3 = 5(00000110 ^ 00000011 = 00000101) |
~ |
按位取反(0 变 1,1 变 0) | ~6 = -7(~00000110 = 11111001,补码对应 – 7) |
<< |
左移(左移 n 位 = 原值 ×2ⁿ,低位补 0) | 3 << 2 = 12(00000011 << 2 = 00001100) |
>> |
右移(右移 n 位 = 原值 ÷2ⁿ,高位补符号位) | 6 >> 2 = 1(00000110 >> 2 = 00000001) |
>>> |
无符号右移(右移 n 位,高位补 0,仅适用于正数) | 6 >>> 2 = 1(同右移,负数结果不同) |
七、条件运算符(三元运算符)
1. 语法格式
(条件表达式) ? 结果1 : 结果2;
- 执行逻辑:若条件表达式为
true,结果为结果1;否则为结果2。 - 结果 1 和结果 2 需为同一类型或兼容类型。
2. 示例
int a = 10, b = 20;
int max = (a > b) ? a : b; // max=20(a<b,取b)
String res = (a == b) ? "相等" : "不等"; // res="不等"
八、运算符优先级
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序。
上一行中的运算符总是优先于下一行的。
| 优先级 | 运算符说明 | Java运算符 |
|---|---|---|
| 1 | 括号 | ()、[]、{} |
| 2 | 正负号 | +、- |
| 3 | 单元运算符 | ++、--、~、! |
| 4 | 乘法、除法、求余 | *、/、% |
| 5 | 加法、减法 | +、- |
| 6 | 移位运算符 | <<、>>、>>> |
| 7 | 关系运算符 | <、<=、>=、>、instanceof |
| 8 | 等价运算符 | ==、!= |
| 9 | 按位与 | & |
| 10 | 按位异或 | ^ |
| 11 | 按位或 | | |
| 12 | 条件与 | && |
| 13 | 条件或 | | |
| 14 | 三元运算符 | ? : |
| 15 | 赋值运算符 | =、+=、-=、*=、/=、%= |
| 16 | 位赋值运算符 | &=、|=、<<=、>>=、>>>= |
开发建议:
不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量
使用()来控制表达式的执行顺序。不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它
分成几步来完成。例如: (num1 + num2) * 2 > num3 && num2 > num3 ? num3 : num1 + num2;

