首页 > 编程笔记

Java类型转换(强制类型转换和自动类型转换)

类型转换是将变量从一种数据类型更改为另一种数据类型的过程。Java 语言提供了两种类型转换的方式,分别是自动类型转换和强制类型转换。

自动类型转换

Java 的基本数据类型可以进行混合运算,不同类型的数据在运算过程中,会先被自动转换为同一类型再进行运算。

数据类型根据占用内存空间的大小被划分为高低不同的级别,占用内存空间小的级别低,占用内存空间大的级别高,自动类型转换遵循从低级到高级的转换规则。也就是说,数据类型能够自动从占用内存空间小的类型向占用内存空间大的类型转换。

Java 的基本数据类型经过自动类型转换后的结果如下表所示。

表 1 Java的基本数据类型经过自动类型转换后的结果
操作数1的数据类型 操作数2的数据类型 转换后的数据类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

【实例】分别对 byte、int、float、char 和 double 型变量进行加减乘除运算后,为运算结果选择合适的数据类型,关键代码如下。
byte b = 127;
int i = 150;
float f = 452.12f;
float result1 = b + f; //float 的级别比 byte 的高,因此 b+f 运算结果的数据类型为级别更高的 float
int result2 = b * i; //int 的级别比 byte 的高,因此 b*i 运算结果的数据类型为级别更高的 int

强制类型转换

当数据类型从占用内存空间大的类型向占用内存空间小的类型转换时,必须使用强制类型转换(又被称作显式类型转换)。

当把一个整数赋给一个 byte、short、int 或 long 型变量时,不可以超出这些数据类型的取值范围,否则数据就会溢出。

【实例】int 型变量强制转换为 byte 型。
int i = 258;
byte b = (byte) i;
System.out.println("b的值:" + b);
定义一个值为 258 的 int 型变量 i,把 int 型变量 i 强制转换为 byte 型,并在控制台中输出强制转换后的结果,输出结果为:

b的值:2

由于 byte 型变量的取值范围是 -128~127,而 258 超过了这个范围,因此数据溢出。

在进行强制类型转换时一定要加倍小心,不要超出变量的取值范围。

推荐阅读