Java 运算符基础与使用指南
Java 提供了丰富的运算符,涵盖了从简单的算术运算到复杂的位运算、逻辑运算等多个方面。掌握这些运算符是每位 Java 程序员的必修课。
本文详细介绍了 Java 中的各类运算符,包括算术、关系、逻辑、位运算、移位及条件运算符。内容涵盖语法规范、操作示例、优先级规则及特殊场景处理(如整数除法、短路求值)。旨在帮助开发者掌握基础运算逻辑,编写高效简洁的代码。

Java 提供了丰富的运算符,涵盖了从简单的算术运算到复杂的位运算、逻辑运算等多个方面。掌握这些运算符是每位 Java 程序员的必修课。
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --> 计算 a 除以 b 后的余数
注意:
int 结果是整数类型,并且会向下取整。int a = 3;
int b = 2;
// 在数学中应该是 1.5,但在 Java 中输出结果为 1,会向下取整,即小数点之后全部舍弃掉了
System.out.println(a / b);
// 如果要得到数学中的结果,可以使用如下方式
double d = a * 1.0 / b;
System.out.println(d); // 1.5
int a = 1;
int b = 0;
System.out.println(a / b); // 会抛出异常:ArithmeticException: / by zero
% 不仅可以对整数取模,也可以对 double 类型取模,其实没啥意义:System.out.println(11.5 % 2.0); // 1.5
int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出:3
a = 1;
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出:0
a += 3; // 相当于 a = a + 3
System.out.println(a); // 输出:3
a /= 3; // 相当于 a = a / 3
System.out.println(a); // 输出:1
注意: 只有变量才能使用增量运算符,常量不能使用。
特别注意:
a += 1.2; // 合法的,但是结果是 a+1,说明 += 会自己先隐式转换
// a = a + 1.2; // 不合法,大类型转换小类型必须显示转换
int a = 1;
System.out.println(++a); // 输出:2 --> 先自增,再打印
System.out.println(a++); // 输出:2 --> 先打印,再自增
注意:
++)或自减(--),操作的是变量的值,会先增减再返回或先返回再增减,具体看前置还是后置。关系运算符主要有六个:==、!=、>、<、>=、<=,其计算结果是 true 或 false。
int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a < b); // true
System.out.println(a >= b); // false
System.out.println(a <= b); // true
注意:
== 比较对象时,需要确保对象的内容相等,而不是地址相等。语法规则:表达式 1 && 表达式 2,左右表达式必须是 boolean 类型的结果。
相当于现实生活中的例子,比如:如果是学生,并且带有学生证才可以享受半票。 两个表达式都真,结果才是真,只要有一个是假,结果就是假。
| 表达式 1 | 表达式 2 | 结果 |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 假 | 假 |
| 假 | 真 | 假 |
| 假 | 假 | 假 |
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); // 左为假 且 右为假,则结果为假
语法规则:表达式 1 || 表达式 2,左右表达式必须是 boolean 类型的结果。
相当于现实生活中的例子,比如:买房子交钱,全款或者 按揭都可以,如果全款或者按揭,房子就是你的,否则站一边去。
| 表达式 1 | 表达式 2 | 结果 |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 假 | 真 |
| 假 | 真 | 真 |
| 假 | 假 | 假 |
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); // 左为假 且 右为假,则结果为假
注意: 左右表达式至少有一个为真,则结果为真。
语法规则:! 表达式,取反。
| 表达式 | 结果 |
|---|---|
| 真 | 假 |
| 假 | 真 |
int a = 1;
System.out.println(!(a == 1)); // a == 1 为 true,取反则为 false
System.out.println(!(a == 1)); // a == 1 为 true,取反则为 false
&& 和 || 遵循短路求值的规则。
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 > 20 || 10 / 0 == 0); // 打印 true
注意:
&&,如果左边表达式为 false,则右边表达式无需执行。||,如果左边表达式为 true,则右边表达式无需执行。Java 中数据操作的最小单位是字节,而数据操作的最小单位是比特位。字节是最小的存储单位,每个字节是由 8 个二进制位组成的,多个字节组合在一起可以表示不同的数据。
位运算符主要有:&、|、^。除这三种运算符外,其余都是二元运算符。
如果两个二进制位都为 1,则结果为 1,否则结果为 0。
int a = 10;
int b = 20;
System.out.println(a & b); // 输出 0
进行按位运算,需要先把 10 和 20 转成二进制,分别为 1010 和 10100。
| 10 的二进制 | 20 的二进制 | 0 的二进制 |
|---|---|---|
| 00001010 | 00010100 | 00000000 |
如果两个二进制位有一个为 1,则结果为 1,否则结果为 0。
int a = 10;
int b = 20;
System.out.println(a | b); // 输出 30
运算方式和按位与类似。
注意:当 & 和 | 的操作数为整数 (int, short, long, byte) 的时候,表示按位运算,当操作数为 boolean 的时候,表示逻辑运算。
如果该位为 1,则该位置为 0,如果该位为 0,则该位置为 1。
int a = 0xF; // 十六进制数 0F,二进制是 1111
System.out.printf("%x\n", ~a); // 输出 1111 的按位取反
如果两个二进制位相同,则结果为 0,相异则结果为 1。
int a = 0x1;
int b = 0x1;
System.out.printf("%x\n", a ^ b); // 输出 0
注意: 如果两个数相同,则异或的结果为 0。
移位运算符有三个:<<、>>、>>>,都是二元运算符,且是按照二进制位来进行移位运算的。
int a = 0x10;
System.out.printf("%x\n", a << 1); // 输出结果(注意,是十六进制打印的)
注意: 向左移位,剩余的是符号位,所以正数左移可能会变成负数。
int a = 0x10;
System.out.printf("%x\n", a >> 1); // 输出结果:10
int b = 0xffff0000;
System.out.printf("%x\n", b >> 1); // 输出结果:7fff8000
int a = 0xFFFFFFF;
System.out.printf("%x\n", a >>> 1); // 输出结果:ffffffff
注意:
条件运算符是 Java 中的三目运算符,它用于简化条件判断。其基本语法为:
条件表达式 ? 表达式 1 : 表达式 2;
如果条件表达式为 true,则返回表达式 1 的值;否则,返回表达式 2 的值。
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println(max); // 输出:20
注意:
在一条表达式中,各个运算符可以混合使用进行运算,但是运算符的优先级不同,比如:* 和 / 的优先级要高于 + 和 -,有些运算符下低不注意,可能就会造成很大的麻烦。
// 求 a 和 b 的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);
上述表达式中,由于 + 的优先级高于 >>,因此先和 b-a 的结果做加法,整体为 20,最后再进行右移,因此结果为 10。
修改如下:
// 求 a 和 b 的平均值
int a = 10;
int b = 20;
int c = a + ((b - a) >> 1);
System.out.println(c);
注意: 运算符之间是有优先级的。具体的规则我们不必记,在可能存在歧义的代码中加上括号即可。
本文详细介绍了 Java 中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算符以及运算符的优先级。掌握这些运算符能够帮助你更高效地进行编程并优化程序的运行效率。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online