05 Java 运算符详解

106 阅读6分钟

Java 运算符详解

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

1. 算术运算符

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

运算符描述示例结果注意事项
+加法5 + 3"Hello" + "World"8"HelloWorld"支持数值相加和字符串拼接
-减法5 - 310.5 - 2.328.2可用于数值减法,也可表示负数(如 -3
*乘法5 * 32.5 * 41510.0数值乘法,注意整数溢出问题
/除法5 / 35.0 / 311.666...整数除法截断小数,浮点数除法保留小数
%取余(模运算)5 % 37 % 2.522.0结果符号与被除数一致(如 -5 % 3 = -2
++自增int a=5; a++++aa=6a=6a++先使用后自增,++a先自增后使用
--自减int a=5; a----aa=4a=4同自增

2. 赋值运算符

用于给变量赋值,支持直接赋值和复合赋值(运算 + 赋值)。

运算符描述等价表达式示例结果
=简单赋值a = bint a = 5a=5
+=加后赋值a += b → a = a + ba=5; a+=3a=8
-=减后赋值a -= b → a = a - ba=5; a-=3a=2
*=乘后赋值a *= b → a = a * ba=5; a*=3a=15
/=除后赋值a /= b → a = a / ba=5; a/=3a=1
%=取余后赋值a %= b → a = a % ba=5; a%=3a=2
&=按位与后赋值a &= b → a = a & ba=6(110); a&=3(011)a=2(010)
|=按位或后赋值a |= b → a = a | ba=6(110); a|=3(011)a=2(111)
^=按位异或后赋值a ^= b → a = a ^ ba=6(110); a^=3(011)a=5(101)
<<=左移后赋值a <<= b → a = a << ba=5(101); a<<=2a=20(10100)
>>=右移后赋值a >>= b → a = a >> ba=10(1010); a>>=2a=2(10)
>>>=无符号右移后赋值a >>>= b → a = a >>> ba=-10; a>>>=21073741821 按无符号规则右移,结果为正数

对于代码 int a = -10; a >>> 2;,计算过程如下:

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

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

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

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

    00111111 11111111 11111111 11111101

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

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

3. 比较运算符

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

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

4. 逻辑运算符

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

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

5. 位运算符

直接对二进制位进行操作,仅适用于整数类型(byte、short、int、long)。

运算符描述二进制示例十进制示例结果
&按位与(对应位都为 1 则为 1)1010 & 110010 & 128(1000)
按位或(对应位有 1 则为 1)`1010\1100``10\
^按位异或(对应位不同则为 1)1010 ^ 110010 ^ 126(0110)
~按位非(按位取反,含符号位)~1010(32 位补码)~10-11
<<左移(高位丢弃,低位补 0)1010 << 210 << 240(101000)
>>带符号右移(高位补符号位)1010 >> 2-10 >> 210 >> 2-10 >> 22(10)-3
>>>无符号右移(高位补 0)-10 >>> 2(32 位无符号)-10 >>> 21073741821(参考无符号右移后赋值章节)

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. 位运算符仅适用于整数,浮点数需先转为整数再运算。