Java算术运算符遵循类型提升规则:操作数按double→float→long→int顺序提升;/结果类型由操作数类型决定,整除向零截断;%结果符号同被除数;整数溢出不报错但回绕,浮点除零得Infinity/NaN。

Java 中的算术运算符 +、-、*、/、% 遵循明确的类型转换规则和运算优先级,其行为取决于操作数的类型(如 int、long、float、double)以及是否发生溢出或除零等异常情况。
基本运算规则与类型提升
当两个操作数类型不同时,Java 会按以下顺序自动提升类型(称为“二元数字提升”):
- 如果任一操作数是 double,另一个也转为 double,结果为 double
- 否则,若任一为 float,另一个转为 float,结果为 float
- 否则,若任一为 long,另一个转为 long,结果为 long
- 否则,两个操作数都是 int(或更小类型如 byte/short/char),全部提升为 int,结果为 int
例如:byte a = 1; short b = 2; int c = a + b; 中,a + b 实际按 int 计算,不会溢出 byte 或 short 范围。
除法 / 的整除与浮点行为
/ 的结果类型完全由操作数类型决定,不是由数值大小决定:
-
5 / 2→ 结果是 2(int 除 int,向零截断,不四舍五入) -
5.0 / 2或5 / 2.0→ 结果是 2.5(至少一个为浮点,结果为 double) -
5f / 2→ 结果是 2.5f(float 类型)
注意:整数除零(如 5 / 0)抛出 ArithmeticException;浮点除零(如 5.0 / 0.0)得 Infinity 或 -Infinity,0.0 / 0.0 得 NaN。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
取余 % 的符号与适用范围
%(取模)的结果符号与**被除数**(左操作数)一致,且满足恒等式:(a / b) * b + (a % b) == a(在无溢出前提下):
-
7 % 3→ 1 -
-7 % 3→ -1(不是 2) -
7 % -3→ 1(模数符号不影响结果符号) -
-7 % -3→ -1
% 可用于整数和浮点数(如 7.5 % 2.0 得 1.5),但不能用于 boolean、String 等非数字类型。
溢出与隐式转换风险
Java 不检查整数运算溢出(如 int 最大值加 1 会回绕为最小值),也不自动提升到更大类型:
-
int max = Integer.MAX_VALUE; int overflow = max + 1;→overflow为Integer.MIN_VALUE -
byte b = 127; b = (byte)(b + 1);→ 必须显式强制转换,否则编译错误(因为b + 1是 int) - 想安全计算,可使用
Math.addExact()、Math.multiplyExact()等方法,溢出时抛出ArithmeticException
浮点运算遵循 IEEE 754 标准,支持 Infinity、NaN 和次正规数,但存在精度丢失问题(如 0.1 + 0.2 != 0.3)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










