目录
1. 自动转换(隐式)
- 特点:代码不需要进行特殊处理,自动完成
- 规则:数据范围从小到大(与字节数无关)
public class test04 {
public static void main(String[] args) {
// int --> long 符合从小到大的规则
long num1 = 26;
System.out.println(num1);
// float --> double 符合从小到大的规则
double num2 = 3.14F;
System.out.println(num2);
// long --> float 符合从小到大的规则
float num3 = 26L;
System.out.println(num3);
}
}
2. 强制转换(显示)
- 特点:代码需要进行特殊的格式处理,不能自动完成
- 格式:范围小的类型 范围小的变量名=(范围小的类型)原本范围大的数据
public class test05 {
public static void main(String[] args) {
// long --> int 不是从小到大
// 格式:范围小的类型 范围小的变量名=(范围小的类型)原本范围大的数据
int num = (int) 100L;
System.out.println(num);
}
}
3. 注意事项
- 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
- byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
- boolean类型不能发生数据类型转换
public class test06 {
public static void main(String[] args) {
// long--> int 强制转换;int 最大范围 21亿 会发生数据溢出
int num1 = (int) 6000000000L;
System.out.println(num1); // 1705032704
// double --> int 强制转换;精度损失
int num2 = (int) 3.14;
System.out.println(num2); // 3
int num3 = (int) 3.9;
System.out.println(num3); // 3
// 计算机的底层会用一个数字(二进制)来代表字符A,就是65
char letter = 'A';
System.out.println(letter + 1); // 66
// byte + byte 先提升为 int 类型 int + int --》 int
byte num4 = 20; // 注:右侧数值不能超过左侧的数据类型范围
byte num5 = 30;
// byte res = num4 + num5;
int res1 = num4 + num5;
System.out.println(res1);
// byte + shor 先提升为 int 类型 int + int --> 强制转换为short,结果为未超出short范围
short num6 = 40;
short res2 = (short) (num5 + num6);
System.out.println(res2);
}
}