一、运算符的分类
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;