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 则右侧不执行) | |
! | 逻辑非 | -(单目运算符) | !(5>3)、!false | false、true |
5. 位运算符
直接对二进制位进行操作,仅适用于整数类型(byte、short、int、long)。
| 运算符 | 描述 | 二进制示例 | 十进制示例 | 结果 |
|---|---|---|---|---|
& | 按位与(对应位都为 1 则为 1) | 1010 & 1100 | 10 & 12 | 8(1000) |
| | 按位或(对应位有 1 则为 1) | `1010\ | 1100` | `10\ |
^ | 按位异或(对应位不同则为 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)。 - 逻辑运算符
&&、||支持短路运算,可避免无效计算或错误(如避免除零)。 - 位运算符仅适用于整数,浮点数需先转为整数再运算。