Java 运算符详解

Java 运算符用于对变量和值执行各类操作,按功能可分为以下核心类别,包含详细用法、示例及优先级说明。

1. 算术运算符

用于执行基本数学运算,支持整数和浮点数运算。

运算符 描述 示例 结果 注意事项
+ 加法 5 + 3"Hello" + "World" 8"HelloWorld" 支持数值相加和字符串拼接
- 减法 5 - 310.5 - 2.3 28.2 可用于数值减法,也可表示负数(如 -3
* 乘法 5 * 32.5 * 4 1510.0 数值乘法,注意整数溢出问题
/ 除法 5 / 35.0 / 3 11.666... 整数除法截断小数,浮点数除法保留小数
% 取余(模运算) 5 % 37 % 2.5 22.0 结果符号与被除数一致(如 -5 % 3 = -2
++ 自增 int a=5; a++++a a=6a=6 a++先使用后自增,++a先自增后使用
-- 自减 int a=5; a----a a=4a=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;,计算过程如下:

  1. 获取 -10 的 32 位二进制补码

正数 10 的二进制为 00000000 00000000 00000000 00001010

取反加 1 得到 -10 的补码:11111111 11111111 11111111 11110110

  1. 无符号右移 2 位:向右移动 2 位,高位补 0,结果为:

00111111 11111111 11111111 11111101

  1. 转换为十进制:上述二进制对应的十进制数为 1073741821

因此,程序的输出结果是:1073741821

3. 比较运算符

用于比较两个值的关系,返回布尔值(true/false),常用于条件判断。

运算符 描述 示例 结果 适用场景
== 等于 5 == 3"a" == new String("a") falsefalse 比较基本类型值相等,引用类型比较地址
!= 不等于 5 != 310.5 != 10.5 truefalse 与 == 逻辑相反
> 大于 5 > 32.3 > 5.1 truefalse 数值大小比较
< 小于 5 < 34.5 < 6.2 falsetrue 数值大小比较
>= 大于等于 5 >= 53.1 >= 3.1 truetrue 包含等于的数值比较
<= 小于等于 5 <= 32.7 <= 2.7 falsetrue 包含等于的数值比较

4. 逻辑运算符

用于连接布尔表达式(true/false),返回布尔值,支持短路运算。

运算符 描述 短路特性 示例 结果
&& 逻辑与 是(左侧为 false 则右侧不执行) (5>3) && (2>1)(5<3) && (1/0==0) truefalse(避免除零错误)
`| ` 逻辑或 是(左侧为 true 则右侧不执行) (2<1)、`(5>3)|
! 逻辑非 -(单目运算符) !(5>3)!false falsetrue

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. 运算符优先级(从高到低)

运算优先级决定执行顺序,优先级高的先执行,可通过括号 () 改变顺序(推荐用括号提高可读性):

  1. 括号 ()(最高优先级)
  2. 一元运算符 ++--!~+(正)、-(负)
  3. 算术运算符:*/%(乘除取余)、 +-
  4. 位运算符:<<>>>>>(无符号移位运算)
  5. 比较运算符:><>=<=(大小比较)
  6. 相等运算符:==!=(相等性比较)
  7. 位运算符:&(按位与)→ ^(按位异或)→ |(按位或)
  8. 逻辑运算符:&&(逻辑与)→ ||(逻辑或)
  9. 三元运算符 ? :
  10. 赋值运算符 =+=-= 等(最低优先级)

优先级示例

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

核心注意事项

  1. 整数除法会截断小数,需保留小数时需转为浮点数(如 5.0 / 3)。
  2. 自增 / 自减运算符在表达式中需注意前后置差异(如 a++ 与 ++a)。
  3. 逻辑运算符 &&|| 支持短路运算,可避免无效计算或错误(如避免除零)。
  4. 位运算符仅适用于整数,浮点数需先转为整数再运算。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐