跳到主要内容
Java 运算符详解:算术、逻辑、位运算及优先级 | 极客日志
Java java 算法
Java 运算符详解:算术、逻辑、位运算及优先级 综述由AI生成 Java 中的各类运算符,涵盖算术、关系、逻辑、位、移位及条件运算符。内容包含运算符定义、分类、具体语法及代码示例。重点解析了增量与自增自减的区别、逻辑短路求值机制、位运算的二进制原理以及移位运算的效率优势。同时强调了类型自动提升、除零异常处理、运算符优先级规则及条件表达式的类型一致性要求,旨在帮助开发者准确掌握 Java 基础运算逻辑与最佳实践。
奇形怪状 发布于 2026/3/27 更新于 2026/5/29 24 浏览Java 运算符
一、运算符基础
定义 :对操作数进行操作的符号,不同运算符操作含义不同。
Java 运算符分类 :算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算符。
二、算术运算符
分为基本四则运算符 、增量运算符 、自增/自减运算符 ,是数值运算的核心。
1. 基本四则运算符:+ - * / %(加减乘除模)
特点 :二元运算符,必须有左右两个操作数。
代码案例 :
int a = 20 ;
int b = 10 ;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(a % b);
核心注意事项 :
操作数类型不一致时,向范围大的类型自动提升 :
System.out.println(1 + 0.2 );
% 可对 double 取模(无实际意义,一般仅用于整型),运算结果符合取决于第一个数:
System.out.println(11.5 % 2.0 );
System.out.println(10 % 3 );
System.out.println(-10 % 3 );
除法和取模的右操作数不能为 0 ,否则抛出算术异常:
int a = 1 ;
int b ;
System.out.println(a / b);
=
0
int / int 结果仍为 int,向下取整 (舍弃小数点后所有数):
int a = 3 ;
int b = 2 ;
System.out.println(a / b);
double d = a * 1.0 / b;
System.out.println(d);
2. 增量运算符:+= -= *= /= %= 特点 :运算结果自动赋值给左操作数,仅支持变量 ,不支持常量;可帮你进行类型转换。
代码案例 :
int a = 1 ;
a += 2 ;
System.out.println(a);
a -= 1 ;
System.out.println(a);
a *= 3 ;
System.out.println(a);
a /= 3 ;
System.out.println(a);
a %= 3 ;
System.out.println(a);
int c = 10 ;
long d = 20 ;
c += d;
System.out.println(c);
3. 自增/自减运算符:++ -- 作用 :++ 给变量 +1,-- 给变量 -1;仅支持变量 ,不支持常量。
核心区别 :单独使用无区别,混合使用有先后顺序 。
代码案例 :
int a = 1 ;
a++;
++a;
System.out.println(a++);
System.out.println(++a);
a--;
System.out.println(a--);
--a;
System.out.println(--a);
三、关系运算符 常用符号 :== != < > <= >=(共 6 个)
核心特点 :运算结果为布尔值(true/false) ;= 是赋值,== 才是判断相等。
代码案例 :
int a = 10 ;
int b = 20 ;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a < b);
System.out.println(a > b);
System.out.println(a <= b);
System.out.println(a >= b);
关键注意 :不能连续写多个关系运算符 (与数学不同),如 3 < a < 5 是错误写法。
四、逻辑运算符(重点) 常用符号 :&& || !(逻辑与、逻辑或、逻辑非)
核心特点 :操作数为布尔值,运算结果也为布尔值 ;&& 和 || 支持短路求值 。
1. 逻辑与 &&:一假则假,全真才真 规则 :左右表达式都为 true,结果才为 true;任意一个为 false,结果为 false。
代码案例 :
int a = 1 ;
int b = 2 ;
System.out.println(a == 1 && b == 2 );
System.out.println(a == 1 && b > 100 );
System.out.println(a > 100 && b == 2 );
System.out.println(a > 100 && b > 100 );
2. 逻辑或 ||:一真则真,全假才假 规则 :左右表达式任意一个为 true,结果为 true;都为 false 时,结果为 false。
代码案例 :
int a = 1 ;
int b = 2 ;
System.out.println(a == 1 || b == 2 );
System.out.println(a == 1 || b > 100 );
System.out.println(a > 100 || b == 2 );
System.out.println(a > 100 || b > 100 );
3. 逻辑非 !:真变假,假变真 规则 :一元运算符,仅对一个布尔表达式取反。
代码案例 :
int a = 1 ;
System.out.println(!(a == 1 ));
System.out.println(!(a != 1 ));
4. 短路求值(核心特性) 规则 :&& 左侧为 false 时,直接返回 false,不计算右侧表达式 ;|| 左侧为 true 时,直接返回 true,不计算右侧表达式 。
代码案例 (无异常,因右侧未执行):
System.out.println(10 > 20 && 10 / 0 == 0 );
System.out.println(10 < 20 || 10 / 0 == 0 );
对比 :& 和 | 作逻辑运算时不支持短路求值 ,会执行所有表达式,直接抛异常:
System.out.println(10 > 20 & 10 / 0 == 0 );
System.out.println(10 < 20 | 10 / 0 == 0 );
五、位运算符 Java 中数据操作最小单位是比特位(0/1) ,位运算符按二进制位逐位运算;
常用符号 :& | ~ ^(按位与、按位或、按位取反、按位异或);除 ~ 是一元运算符,其余为二元。
注意 :操作数为整数 时是位运算,为布尔值 时是逻辑运算(与 && || 区分)。
1. 按位与 &:两位都为 1,结果为 1,否则为 0 int a = 10 ;
int b = 20 ;
System.out.println(a & b);
System.out.println(10 < 20 & 10 > 0 );
System.out.println(10 > 20 & 10 > 0 );
System.out.println(10 < 20 & 10 < 0 );
System.out.println(10 > 20 & 10 < 0 );
2. 按位或 |:两位都为 0,结果为 0,否则为 1 int a = 10 ;
int b = 20 ;
System.out.println(a | b);
3. 按位取反 ~:0 变 1,1 变 0 代码案例 (十六进制简化二进制,%x 按十六进制输出):
int a = 0xf ;
System.out.printf("%x\n" , ~a);
4. 按位异或 ^:两位相同为 0,不同为 1 int a = 0x1 ;
int b = 0x2 ;
System.out.printf("%x\n" , a ^ b);
System.out.println(5 ^ 5 );
System.out.println(5 ^ 0 );
六、移位运算符(了解) 按二进制比特位移动,都是二元运算符 ;符号 :<< >> >>>(左移、右移、无符号右移)。
1. 左移 <<:最左侧位舍弃,最右侧补 0 规则 :左移 N 位 ≈ 原数 × 2 的 N 次方(计算效率高于乘除);
代码案例 (0x10 是十六进制,对应十进制 16):
int a = 0x10 ;
System.out.printf("%x\n" , a << 1 );
2. 右移 >>:最右侧位舍弃,最左侧补符号位 (正数 (符号位为 0) 补 0,负数 (符号位为 1) 补 1) 规则 :右移 N 位 ≈ 原数 ÷ 2 的 N 次方;
代码案例 :
int a = 0x10 ;
System.out.printf("%x\n" , a >> 1 );
int b = 0xffff0000 ;
System.out.printf("%x\n" , b >> 1 );
int c = -1 ;
System.out.println(c >> 2 );
3. 无符号右移 >>>:最右侧位舍弃,最左侧统一补 0 (无论正负) int a = 0xffffffff ;
System.out.printf("%x\n" , a >>> 1 );
移位效率远高于乘除,乘除 2 的 N 次方时优先用移位 ;
移动负数位、移位位数过大,均无实际意义。
七、条件运算符 唯一符号 :表达式 1 ? 表达式 2 : 表达式 3(Java 唯一三目运算符 );
作用 :简化条件判断,是 if-else 的简写形式。
执行规则 :
表达式 1 为 true → 整个表达式结果=表达式 2 的值;
表达式 1 为 false → 整个表达式结果=表达式 3 的值。
代码案例
int a = 10 ;
int b = 20 ;
int max = a > b ? a : b;
System.out.println(max);
System.out.println(flg);
核心注意事项 条件表达式不能单独存在 ,运算结果必须被使用(赋值/输出等):
int a = 10 ;
int b = 20 ;
a > b ? a : b;
表达式 2 和表达式 3 的结果类型必须一致 (除非支持隐式类型转换):
int a = 10 ;
int b = 20 ;
int c = a > b ? 1 : 2.0 ;
八、运算符的优先级
不同运算符优先级不同(如 * / 高于 + -,+ - 高于移位运算符);
无需记忆优先级规则 ,加括号 即可消除表达式歧义,提升代码可读性。
代码案例
int a = 10 ;
int b = 20 ;
int c = a + (b - a) >> 1 ;
System.out.println(c);
int d = a + ((b - a) >> 1 );
System.out.println(d);
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online