隐式类型转换

一、 隐式转换基础

1. 什么是隐式转换?

不同数据类型的变量进行计算、赋值等操作时,编译器会自动将它们转换为同一种类型后再进行处理,这个过程称为隐式类型转换。

2. 取值范围大小顺序

在讨论转换规则前,需要明确各类型的取值范围(权重)大小:

char < short < int < long < long long < float < double

二、 核心转换规则

规则 1:常规晋升(小拓宽到大)

  • 原理:当取值范围的类型与取值范围的类型进行混合运算时,范围小的类型会先自动提升为范围大的类型,然后再进行运算。
  • 目的:防止数据溢出,保证运算精度。

规则 2:整型提升(整型特例)

  • 原理charshort 类型的数据在参与运算时,无论有没有和更高等级的类型混合,都会直接先无条件提升为 int 类型,然后再进行运算。
  • 注意:哪怕是两个 short 相加,结果也是 int

三、 练习题

案例 1:两个 short 相加

1
2
3
short b1 = 10;
short b2 = 20;
数据类型 result = b1 + b2;
  • 推导过程:根据规则 2b1b2 虽然都是 short,但在相加的那一刻,它们都会先被强制提升为 int
  • 最终结果类型int

案例 2:混合基本类型与浮点型

1
2
3
4
int i = 10;
long n = 100L;
double d = 20.0;
数据类型 result = i + n + d;
  • 推导过程
    1. 先算 i + nint 遇到 long,根据规则 1i 提升为 long,相加结果为 long
    2. 再算 (i + n) + d:上一步的 long 结果遇到 double,根据规则 1long 提升为 double
  • 最终结果类型: double

案例 3:整型多阶段混合

1
2
3
4
short b = 10;
long s = 20L;
long long n = 100LL;
数据类型 result = b + s + n;
  • 推导过程
    1. 先算 b + sbshort,根据规则 2先提升为 int。接着 int 遇到 long,根据规则 1,再提升为 long。相加结果为 long
    2. 再算 (b + s) + n:上一步的 long 结果遇到 long long,根据规则 1,提升为 long long
  • 最终结果类型long long