一.Java的各种运算符和其对应的表达式
1. 算术运算符(Arithmetic Operators)
这些运算符用于执行基本的数学运算。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | a + b | a 和b 的和 |
- | 减法 | a - b | a 减去b |
* | 乘法 | a * b | a 和b 的积 |
/ | 除法 | a / b | a 除以b (如果b 为0,会抛出异常) |
% | 取余 | a % b | a 除以b 的余数 |
2. 关系运算符(Relational Operators)
用于比较两个值,返回布尔值(true
或false
)。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
== | 等于 | a == b | 如果a 等于b ,返回true ,否则返回false |
!= | 不等于 | a != b | 如果a 不等于b ,返回true ,否则返回false |
> | 大于 | a > b | 如果a 大于b ,返回true ,否则返回false |
< | 小于 | a < b | 如果a 小于b ,返回true ,否则返回false |
>= | 大于等于 | a >= b | 如果a 大于或等于b ,返回true ,否则返回false |
<= | 小于等于 | a <= b | 如果a 小于或等于b ,返回true ,否则返回false |
3. 逻辑运算符(Logical Operators)
用于连接多个条件或表达式。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
&& | 逻辑与(AND) | a > 10 && b < 5 | 如果a > 10 且b < 5 都为true ,返回true ,否则返回false |
|| | | | 逻辑或(OR) | |
! | 逻辑非(NOT) | !a | 如果a 为true ,返回false ,如果a 为false ,返回true |
4. 赋值运算符(Assignment Operators)
用于给变量赋值。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
= | 赋值 | a = 5 | 将5 赋值给a |
+= | 加法赋值 | a += 3 | 等效于a = a + 3 |
-= | 减法赋值 | a -= 2 | 等效于a = a - 2 |
*= | 乘法赋值 | a *= 4 | 等效于a = a * 4 |
/= | 除法赋值 | a /= 2 | 等效于a = a / 2 |
%= | 取余赋值 | a %= 3 | 等效于a = a % 3 |
5. 自增和自减运算符(Increment and Decrement Operators)
用于增加或减少一个变量的值。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
++ | 自增(前/后) | a++ 或 ++a | a 的值增加1,前后操作的差异在于:a++ 返回旧值,++a 返回新值 |
-- | 自减(前/后) | a-- 或 --a | a 的值减少1,前后操作的差异在于:a-- 返回旧值,--a 返回新值 |
6. 位运算符(Bitwise Operators)
用于按位处理整数类型的数据。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
& | 位与 | a & b | 按位与操作 |
` | ` | 位或 | `a |
^ | 位异或 | a ^ b | 按位异或操作 |
~ | 位非 | ~a | 按位取反 |
<< | 左移 | a << 2 | 将a 的二进制位向左移动2位 |
>> | 右移 | a >> 2 | 将a 的二进制位向右移动2位 |
>>> | 无符号右移 | a >>> 2 | 将a 的二进制位无符号地向右移动2位 |
7. 三目运算符(Ternary Operator)
是一种简化的条件运算符,格式为:条件 ? 表达式1 : 表达式2
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
? : | 条件运算符 | a > 10 ? "大于10" : "小于等于10" | 如果a > 10 为true ,结果为"大于10" ,否则为"小于等于10" |
8. 实例化运算符(Instanceof Operator)
用于测试一个对象是否是某个类的实例。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
instanceof | 实例化测试 | a instanceof String | 如果a 是String 类型的实例,返回true ,否则返回false |
9. 空值合并运算符(Null Coalescing Operator)
用于简化空值判断。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
?? | 空值合并 | a ?? b | 如果a 为null ,返回b ,否则返回a |
二.运算符的优先级
在Java中,运算符的优先级决定了在没有括号的情况下,哪些运算符先执行。了解运算符的优先级非常重要,它可以帮助你控制表达式的计算顺序。以下是Java中常见运算符的优先级,从高到低排序:
1. 括号运算符
()
(圆括号) — 用于改变运算顺序- 优先级: 最高
2. 后缀自增和自减
a++
,a--
— 后缀自增和自减- 优先级: 高
3. 一元运算符
+
(正号),-
(负号),++
(前缀自增),--
(前缀自减),~
(按位取反),!
(逻辑非)- 优先级: 高
4. 乘法、除法和取余
*
,/
,%
— 乘法、除法、取余- 优先级: 中等高
5. 加法和减法
+
,-
— 加法、减法- 优先级: 中等
6. 关系运算符
==
,!=
,>
,<
,>=
,<=
— 比较运算符- 优先级: 中等
7. 逻辑与
&&
— 逻辑与- 优先级: 中
8. 逻辑或
||
— 逻辑或- 优先级: 较低
9. 赋值运算符
=
,+=
,-=
,*=
,/=
,%=
— 赋值运算符- 优先级: 较低
10. 条件运算符(三目运算符)
? :
— 三目运算符- 优先级: 较低
11. 按位运算符
&
,|
,^
— 按位与、按位或、按位异或- 优先级: 低
12. 位移运算符
<<
,>>
,>>>
— 左移、右移、无符号右移- 优先级: 较低
13. 逻辑非运算符
!
— 逻辑非- 优先级: 较高
14. instanceof
instanceof
— 判断对象是否是某个类的实例- 优先级: 较低
15. 赋值运算符
=
,+=
,-=
,*=
,/=
,%=
— 赋值运算符- 优先级: 最低
优先级表(从高到低)
优先级 | 运算符 | 示例 |
---|---|---|
1 | () | (a + b) * c |
2 | ++ (前缀)、-- (前缀)、+ (正号)、- (负号)、~ 、! | !a , ++a , -a |
3 | * , / , % | a * b , a / b , a % b |
4 | + , - | a + b , a - b |
5 | == , != , > , < , >= , <= | a > b , a == b |
6 | && | a && b |
7 | ` | |
8 | ? : | a > b ? x : y |
9 | & | a & b |
10 | ^ | a ^ b |
11 | ` | ` |
12 | << , >> , >>> | a << 2 , a >> 2 |
13 | = , += , -= , *= , /= , %= | a = b , a += b |
14 | instanceof | a instanceof String |
运算顺序提示:
- 括号总是优先,改变表达式的默认顺序。
- 自增、自减(前缀)优先级较高,先执行。
- 乘法、除法、取余的优先级高于加法、减法。
- 关系运算符(如
==
,!=
)优先级高于逻辑运算符(如&&
,||
)。 - 赋值(
=
,+=
等)优先级最低,最后执行。
理解运算符优先级对于正确编写复杂的表达式至关重要。如果不确定优先级,可以使用括号来明确运算顺序。