Java算术运算符有+、-、、/、%五种,分别表示加法、减法、乘法、除法和取余;整数除法截断小数,需转浮点类型得小数结果;优先级为 / % > + -,左结合;混合运算按拓宽规则自动提升类型。

Java里的基本运算就是用 +、-、*、/、% 这五个算术运算符对整数或浮点数做计算,但结果是否符合预期,取决于你有没有踩中类型转换和优先级的坑。
Java算术运算符有哪些,对应什么含义
Java支持五种基础算术运算符,不支持幂运算(如 ** 或 ^)——^ 在Java里是位异或,不是乘方:
-
+:加法(也用于字符串拼接,但那是重载行为,不算算术) -
-:减法或取负 -
*:乘法 -
/:除法(整数相除会截断小数,比如5 / 2结果是2,不是2.5) -
%:取余(要求左右操作数都是整数类型或能提升为整数的类型;7.5 % 2.0合法,但7 % 0会抛ArithmeticException)
整数除法为什么总是丢小数?怎么得到小数结果
Java中只要两个操作数都是整数类型(int、long 等),/ 就执行整数除法,直接截断,不四舍五入。
想得到小数结果,必须让至少一个操作数是浮点类型:
立即学习“Java免费学习笔记(深入)”;
- 写成
5.0 / 2、5 / 2.0或(double)5 / 2 - 避免写
5 / 2 * 1.0—— 因为5 / 2先算完得2,再乘1.0得2.0,不是2.5 - 如果变量是
int a = 5, b = 2;,推荐转成(double) a / b,而不是a / b * 1.0
运算符优先级与结合性常见误判点
Java算术运算符优先级从高到低是:++/--(后缀)→ +/-(一元)→ *///% → +/-(二元)。同级左结合。
容易出错的地方:
-
2 + 3 * 4是14,不是20(*优先于+) -
-3 + 2中的-是一元负号,优先级高于+,等价于(-3) + 2 -
10 - 3 + 2是9(左结合:先算10 - 3得7,再+ 2),不是5 - 不确定时就加括号,比如
a + b * c明确写成a + (b * c),既防错也提高可读性
混合类型运算时的自动类型提升规则
当不同数值类型参与运算(如 int 和 long、int 和 double),Java会按“拓宽转换”规则自动提升为更宽的类型:
-
byte/short/char→ 首先提升为int(哪怕和long运算,也是先升int再升long) -
int+long→ 结果是long -
int+double→ 结果是double - 但
float+double→double(不是float)
注意:int a = 1; long b = 2; int c = a + b; 编译失败,因为 a + b 是 long 类型,不能直接赋给 int 变量,必须显式强转:int c = (int)(a + b);(可能溢出)
int x = 10; int y = 3; System.out.println(x / y); // 输出 3(整数除法) System.out.println(x / (double) y); // 输出 3.3333333333333335 System.out.println(2 + 3 * 4); // 输出 14(* 优先) System.out.println((2 + 3) * 4); // 输出 20(括号改变顺序)
最常被忽略的是整数除法的静默截断,以及类型提升后赋值时的编译错误——这两个问题在调试时往往表现为“结果不对”却找不到原因,其实就卡在运算前的类型和优先级判断上。









