在赋值运算或者算术运算的时候,要求数据类型一致,就要进行类型的转换。类型转换分自动转换和强制转换两种。
类型级别从低到高依次排列为:
byte
, short
, char
int
long
float
double
在进行赋值运算的时候,等号左侧的类型级别大于右侧,则直接自动转换:
double d = 6; // 6为int类型,级别低于double,自动类型转换
在进行赋值运算的时候,等号左侧的类型级别小于右侧,则进行强制类型转换:
int i = (int)6.5; // 6.5为double类型,级别高于int,要强制类型转换
多种数据类型参与运算的时候,整数类型、浮点类型、字符类型都可以参与运算,唯独布尔类型不可以参与运算。
当一个表达式中有多种数据类型的时候,要找出当前表达式中级别最高的那个类型,然后其余的类型都自动转换为当前表达式中级别最高的类型进行计算:
double d2 = 12 + 1294L + 8.5F + 3.81 + 'a'; // double d2 = 12.0 + 1294.0 + 8.5 + 3.81 + 97.0
也可以进行强制类型转换:
int i2 = (int)(12 + 1294L + 8.5F + 3.81 + 'a'); // 1415(括号内先自动转换,再强转)
对于 byte
、short
、char
类型来说,只要在他们的表数范围内,赋值的时候就不需要进行强转了直接赋值即可。
以 int
类型转换为 byte
类型为例,int
类型占4个字节,byte
类型占1个字节。将 int
类型的10赋给 byte
类型,由于 byte
表数范围为-128~127,可以直接赋值,而将 int
类型的270赋给 byte
类型时要进行强制转换:
byte b1 = 10;
byte b2 = (byte)270;