05 Java 运算符详解
·
Java 运算符详解
Java 运算符用于对变量和值执行各类操作,按功能可分为以下核心类别,包含详细用法、示例及优先级说明。
1. 算术运算符
用于执行基本数学运算,支持整数和浮点数运算。
| 运算符 | 描述 | 示例 | 结果 | 注意事项 |
|---|---|---|---|---|
+ |
加法 | 5 + 3、"Hello" + "World" |
8、"HelloWorld" |
支持数值相加和字符串拼接 |
- |
减法 | 5 - 3、10.5 - 2.3 |
2、8.2 |
可用于数值减法,也可表示负数(如 -3) |
* |
乘法 | 5 * 3、2.5 * 4 |
15、10.0 |
数值乘法,注意整数溢出问题 |
/ |
除法 | 5 / 3、5.0 / 3 |
1、1.666... |
整数除法截断小数,浮点数除法保留小数 |
% |
取余(模运算) | 5 % 3、7 % 2.5 |
2、2.0 |
结果符号与被除数一致(如 -5 % 3 = -2) |
++ |
自增 | int a=5; a++、++a |
a=6、a=6 |
a++先使用后自增,++a先自增后使用 |
-- |
自减 | int a=5; a--、--a |
a=4、a=4 |
同自增 |
2. 赋值运算符
用于给变量赋值,支持直接赋值和复合赋值(运算 + 赋值)。
| 运算符 | 描述 | 等价表达式 | 示例 | 结果 |
|---|---|---|---|---|
= |
简单赋值 | a = b |
int a = 5 |
a=5 |
+= |
加后赋值 | a += b → a = a + b |
a=5; a+=3 |
a=8 |
-= |
减后赋值 | a -= b → a = a - b |
a=5; a-=3 |
a=2 |
*= |
乘后赋值 | a *= b → a = a * b |
a=5; a*=3 |
a=15 |
/= |
除后赋值 | a /= b → a = a / b |
a=5; a/=3 |
a=1 |
%= |
取余后赋值 | a %= b → a = a % b |
a=5; a%=3 |
a=2 |
&= |
按位与后赋值 | a &= b → a = a & b |
a=6(110); a&=3(011) |
a=2(010) |
|= |
按位或后赋值 | a |= b → a = a | b |
a=6(110); a|=3(011) |
a=2(111) |
^= |
按位异或后赋值 | a ^= b → a = a ^ b |
a=6(110); a^=3(011) |
a=5(101) |
<<= |
左移后赋值 | a <<= b → a = a << b |
a=5(101); a<<=2 |
a=20(10100) |
>>= |
右移后赋值 | a >>= b → a = a >> b |
a=10(1010); a>>=2 |
a=2(10) |
>>>= |
无符号右移后赋值 | a >>>= b → a = a >>> b |
a=-10; a>>>=2 |
1073741821 按无符号规则右移,结果为正数 |
对于代码 int a = -10; a >>> 2;,计算过程如下:
- 获取
-10的 32 位二进制补码:
正数 10 的二进制为 00000000 00000000 00000000 00001010,
取反加 1 得到 -10 的补码:11111111 11111111 11111111 11110110。
- 无符号右移 2 位:向右移动 2 位,高位补 0,结果为:
00111111 11111111 11111111 11111101。
- 转换为十进制:上述二进制对应的十进制数为
1073741821。
因此,程序的输出结果是:1073741821
3. 比较运算符
用于比较两个值的关系,返回布尔值(true/false),常用于条件判断。
| 运算符 | 描述 | 示例 | 结果 | 适用场景 |
|---|---|---|---|---|
== |
等于 | 5 == 3、"a" == new String("a") |
false、false |
比较基本类型值相等,引用类型比较地址 |
!= |
不等于 | 5 != 3、10.5 != 10.5 |
true、false |
与 == 逻辑相反 |
> |
大于 | 5 > 3、2.3 > 5.1 |
true、false |
数值大小比较 |
< |
小于 | 5 < 3、4.5 < 6.2 |
false、true |
数值大小比较 |
>= |
大于等于 | 5 >= 5、3.1 >= 3.1 |
true、true |
包含等于的数值比较 |
<= |
小于等于 | 5 <= 3、2.7 <= 2.7 |
false、true |
包含等于的数值比较 |
4. 逻辑运算符
用于连接布尔表达式(true/false),返回布尔值,支持短路运算。
| 运算符 | 描述 | 短路特性 | 示例 | 结果 |
|---|---|---|---|---|
&& |
逻辑与 | 是(左侧为 false 则右侧不执行) |
(5>3) && (2>1)、(5<3) && (1/0==0) |
true、false(避免除零错误) |
| `| | ` | 逻辑或 | 是(左侧为 true 则右侧不执行) |
(2<1)、`(5>3)| |
! |
逻辑非 | -(单目运算符) | !(5>3)、!false |
false、true |
5. 位运算符
直接对二进制位进行操作,仅适用于整数类型(byte、short、int、long)。
| 运算符 | 描述 | 二进制示例 | 十进制示例 | 结果 |
|---|---|---|---|---|
& |
按位与(对应位都为 1 则为 1) | 1010 & 1100 |
10 & 12 |
8(1000) |
| |
按位或(对应位有 1 则为 1) | 1010\|1100 |
10\|12 |
14(1110) |
^ |
按位异或(对应位不同则为 1) | 1010 ^ 1100 |
10 ^ 12 |
6(0110) |
~ |
按位非(按位取反,含符号位) | ~1010(32 位补码) |
~10 |
-11 |
<< |
左移(高位丢弃,低位补 0) | 1010 << 2 |
10 << 2 |
40(101000) |
>> |
带符号右移(高位补符号位) | 1010 >> 2、-10 >> 2 |
10 >> 2、-10 >> 2 |
2(10)、-3 |
>>> |
无符号右移(高位补 0) | -10 >>> 2(32 位无符号) |
-10 >>> 2 |
1073741821(参考无符号右移后赋值章节) |
6. 三元运算符
Java 唯一的三目运算符,用于简化条件判断赋值,语法:条件表达式 ? 表达式1 : 表达式2。
核心规则
- 若条件表达式为
true,返回表达式1的值 - 若条件表达式为
false,返回表达式2的值
示例
int a = 5, b = 3;
int max = (a > b) ? a : b; // max = 5(a>b为true,返回a)
String result = (a % 2 == 0) ? "偶数" : "奇数"; // result = "奇数"
double avg = (85 + 92) > 90 ? 92.5 : 88.0; // avg = 88.0
7. 运算符优先级(从高到低)
运算优先级决定执行顺序,优先级高的先执行,可通过括号 () 改变顺序(推荐用括号提高可读性):
- 括号
()(最高优先级) - 一元运算符
++、--、!、~、+(正)、-(负) - 算术运算符:
*、/、%(乘除取余)、+、- - 位运算符:
<<、>>、>>>(无符号移位运算) - 比较运算符:
>、<、>=、<=(大小比较) - 相等运算符:
==、!=(相等性比较) - 位运算符:
&(按位与)→^(按位异或)→|(按位或) - 逻辑运算符:
&&(逻辑与)→||(逻辑或) - 三元运算符
? : - 赋值运算符
=、+=、-=等(最低优先级)
优先级示例
int x = 2 + 3 * 4; // 先算3*4=12,再算2+12=14 → x=14
int y = (2 + 3) * 4; // 括号改变顺序,先算2+3=5,再算5*4=20 → y=20
boolean z = 5 > 3 && 2 < 4 || 1 == 0; // 先比较,再逻辑与,最后逻辑或 → z=true
核心注意事项
- 整数除法会截断小数,需保留小数时需转为浮点数(如
5.0 / 3)。 - 自增 / 自减运算符在表达式中需注意前后置差异(如
a++与++a)。 - 逻辑运算符
&&、||支持短路运算,可避免无效计算或错误(如避免除零)。 - 位运算符仅适用于整数,浮点数需先转为整数再运算。
更多推荐

所有评论(0)