背景与动机
运算符决定数据如何参与计算,类型转换决定不同类型的数据能否一起运算。
Java 的类型规则比较严格:有些转换编译器会自动完成,有些转换必须明确写出来。理解这点能避免很多“看起来能算,实际报错或精度丢失”的问题。
核心原理拆解
1. 常见运算符
Java 常见运算符包括:
- 算术运算符:
+、-、*、/、% - 比较运算符:
>、>=、<、<=、==、!= - 逻辑运算符:
&&、||、! - 位运算符 / 逻辑与:
&、|、^、~ - 赋值运算符:
=、+=、-=、*= - 自增自减:
++、--
2. & 与 && 的区别
两者都可用于布尔表达式,但含义和执行方式不同:
| 对比项 | & | && |
|---|---|---|
| 名称 | 逻辑与 / 按位与 | 短路与 |
| 是否短路 | 否,两边都会求值 | 是,左边为 false 时右边不执行 |
| 常见用途 | 布尔逻辑、整数按位运算 | 日常条件判断 |
int x = 0;if (false & (x++ > 0)) { // 不会进入}System.out.println(x); // 1,右边仍然执行了
x = 0;if (false && (x++ > 0)) { // 不会进入}System.out.println(x); // 0,右边被短路对 boolean 来说,& 是“两边都算完再判断”,&& 是“前面已经能确定结果就不再算后面”。日常写条件判断优先用 &&;需要两边副作用都发生时再用 &。
同理,| 与 || 也类似:| 不短路,|| 左边为 true 时右边不执行。
3. 整数除法会丢掉小数部分
int result = 5 / 2;System.out.println(result); // 2两个整数相除,结果仍然是整数,小数部分会被截断。如果需要小数结果,至少让一边是浮点数:
double result = 5.0 / 2;System.out.println(result); // 2.54. 自动类型转换
当小范围类型赋值给大范围类型时,Java 可以自动转换:
int a = 10;long b = a;double c = b;这类转换通常不会丢失主要数值信息,所以编译器允许。
5. 强制类型转换
大范围类型赋值给小范围类型时,需要强制转换:
double price = 19.9;int n = (int) price;System.out.println(n); // 19强制转换可能导致精度丢失或数值溢出,所以必须显式写出。
6. 字符串拼接
+ 遇到字符串时会变成字符串拼接:
System.out.println("age=" + 18);如果表达式中前面已经是字符串,后面的 + 会继续按拼接处理:
System.out.println("result=" + 1 + 2); // result=12System.out.println(1 + 2 + " result"); // 3 result最小可运行代码示例
public class OperatorDemo { public static void main(String[] args) { int a = 5; int b = 2;
System.out.println(a / b); System.out.println(a % b); System.out.println(a > b && b > 0);
double price = 19.9; int intPrice = (int) price; System.out.println(intPrice);
System.out.println("sum=" + (a + b)); }}常见陷阱与错误示例
1. 误以为整数除法会自动保留小数
double result = 5 / 2;System.out.println(result); // 2.0虽然接收变量是 double,但 5 / 2 已经先按整数除法算完了。
2. 强制转换导致精度丢失
double d = 3.99;int n = (int) d;System.out.println(n); // 3强制转成 int 不会四舍五入,而是直接截断小数部分。
3. 字符串拼接顺序导致结果误判
System.out.println("x=" + 1 + 2);输出是 x=12,不是 x=3。需要先计算时应加括号:
System.out.println("x=" + (1 + 2));面试高频问题
1. 自动类型转换和强制类型转换有什么区别
自动类型转换通常是小范围到大范围,编译器自动完成;强制类型转换通常是大范围到小范围,需要显式写出,并可能发生精度丢失。

2. Java 中 5 / 2 的结果是什么
结果是 2,因为两个操作数都是整数,执行整数除法。
3. & 和 && 有什么区别
& 不短路,两边都会求值;&& 是短路与,左边为 false 时右边不再执行。条件判断通常用 &&。
4. && 和 || 有什么短路特性
&& 左边为 false 时右边不会执行;|| 左边为 true 时右边不会执行。
一句话总结
Java 运算要同时看“运算符”和“操作数类型”:类型决定计算方式,强制转换要警惕精度丢失,字符串拼接要注意表达式顺序。