Java程序中要求参与计算的数据,必须要保证数据类型一致,如果数据类型不一致将发生类型的转换。
自动转换: 将 "取值范围小" 的转成 "取值范围大" 的
自动转换的规律:byte, short, char -> int -> long -> float -> double
注意: 小于int都会直接转成int
目标:理解数据类型的自动转换
public class DataConvert1 {
public static void main(String[] args) {
byte b = 10;
int i = 20;
// = 赋值运算,将右边的结果赋值给左边的变量,=优先级最低
// byte + int ==> int + int ==> int
// byte b2 = b + i; // 17: 错误: 不兼容的类型: 从int转换到byte可能会有损失
int b2 = b + i;
System.out.println(b2);
double d = 3.1;
int i2 = 2;
// double + int ==> double + double => double
double x = d + i2;
System.out.println(x);
// 注意: 小于int都会直接转成int
byte b3 = 1;
short s = 2;
// byte + short ==> short + short ==> short
// byte + short ==> int + int ==> int
int y = b3 + s; // int
System.out.println(y); // 32: 错误: 不兼容的类型: 从int转换到short可能会有损失
}
}
强制类型转换: 将 "取值范围大" 的转成 "取值范围小" 的
强制类型转换公式:(重要)
目标类型 变量名 = (目标类型)值;
注意: 强制类型转换会丢失数据,一般不要做强制转换
目标:理解数据类型的强制转换
将 "取值范围大" 的转成 "取值范围小" 的
int i = (int)3.4;
public class DataConvert2 {
public static void main(String[] args) {
// 目标类型 变量名 = (目标类型)值;
int i = (int)3.4; // 12: 错误: 不兼容的类型: 从double转换到int可能会有损失
System.out.println(i); // 3
short s = 3;
int i2 = 5;
// short + int ==> int + int => int
short x = (short)(s + i2); // 将s + i2的结果强制转成short
// short x = (short)s + (short)i2; // 不行
System.out.println(x);
}
}