Java中int与long混合运算时结果一定是long,因自动类型提升规则将int转为long;字面量默认int,long需加L后缀;赋值仅支持int→long隐式转换,反之需强制转换。

当 long 和 int 类型参与同一运算时,Java 会自动将 int 提升为 long,整个表达式结果为 long 类型。这是由 Java 的“自动类型提升”规则决定的,无需手动干预,但必须理解其背后的逻辑和边界。
int 与 long 混合运算时,结果一定是 long
只要表达式中出现至少一个 long 值(变量或字面量),所有整型操作数都会被提升到 long,再进行运算:
int + long → longlong - int → longint * long → long-
long / int → long(整除,结果仍是 long)
例如:int a = 100; long b = 200L; long c = a + b; 中,a 被自动转为 long,加法在 long 范围内完成,不会溢出。
字面量默认是 int,写 long 必须加 L 或 l
Java 中整数字面量(如 123)默认是 int 类型。若想表示 long 常量,必须显式标注后缀:
-
123是int -
123L或123l才是long(推荐用大写L,避免与数字1混淆) - 错误示例:
long x = 2147483648;—— 编译失败,因为2147483648超出 int 范围,又没加L,无法识别为合法字面量 - 正确写法:
long x = 2147483648L;
赋值时的隐式转换只允许从小到大
把 int 值赋给 long 变量是安全的,编译器自动完成:
-
int i = 5; long l = i;✅ 合法,隐式转换 -
long l = 5;✅ 字面量5是 int,但可自动转为 long -
long l = 100L; int i = l;❌ 编译报错,不能隐式从 long 到 int - 若真要转,必须强制:
int i = (int) l;,但需自行承担溢出风险
注意 byte/short/char 运算也会先转成 int
虽然不直接涉及 long,但常与 int 混用:任何 byte、short 或 char 参与算术运算时,都会先被提升为 int,然后再按上述规则继续提升:
-
short s = 10; long l = 20L; long r = s + l;→ 先s→int,再int→long,最终long - 不会出现
short + long → short或中间截断

















