




Java算术运算符有+、-、、/、%五种,分别表示加法、减法、乘法、除法和取余;整数除法截断小数,需转浮点类型得小数结果;优先级为 / % > + -,左结合;混合运算按拓宽规则自动提升类型。
Java里的基本运算就是用 +、-、*、/、% 这五个算术运算符对整数或浮点数做计算,但结果是否符合预期,取决于你有没有踩中类型转换和优先级的坑。
Java支持五种基础算术运算符,不支持幂运算(如 ** 或 ^)——^ 在Java里是位异或,不是乘方:
+:加法(也用于字符串拼接,但那是重载行为,不算算术)-:减法或取负*:乘法/:除法(整数相除会截断小数,比如 5 / 2 结果是 2,不是 2.5)%:取余(要求左右操作数都是整数类型或能提升为整数的类型;7.5 % 2.0 合法,但 7 % 0 会抛 ArithmeticException)Java中只要两个操作数都是整数类型(int、long 等),/ 就执行整数除法,直接截断,不四舍五入。
想得到小数结果,必须让至少一个操作数是浮点类型:
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(括号改变顺序)
最常被忽略的是整数除法的静默截断,以及类型提升后赋值时的编译错误——这两个问题在调试时往往表现为“结果不对”却找不到原因,其实就卡在运算前的类型和优先级判断上。