类型转换的分类
1. 隐式转换(自动类型提升)
取值范围小的数值 --> 取值范围大的数值
范例
public class HelloWorld {
public static void main(String[] args) {
int a = 10;
double b = a;
}
}
output
10.0
取值范围从小到大 !
byte < short < int < long < float < double
隐式转换
的两种提升规则
- 取值范围小的,和取值范围大的进行运算,小的会先提升成大的,再进行运算。
- byte short char三种类型的数据在运算的时候,都会直接先提升成为int,再进行运算。
隐式转换小结
取值范围:byte < short < int < long < float < double
什么时候转换?
数据类型不一样,不能进行计算,需要转成一样的才可以进行计算。
转换规则1
- 取值范围小的,和取值范围大的进行运算,小的会先提升成大的,再进行运算。
转换规则2
byte
short
char
三种类型的数据在运算的时候,都会直接先提升成为int
,再进行运算。
2. 强制转换
取值范围大的数值 --> 取值范围小的数值
如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的。如果一定要这么做就需要加入强制转换。
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;
范例
double a = 12.3;
int b = (int)a;
!!强转数据时有可能发生错误!!
范例
int a = 300;//太大了
byte b = (byte)a;
byte
为-128 ~ 127
,装不下int
的300
.
练习
byte b1 = 10;
byte b2 = 20;
int result = b1 + b2;//正常
byte result = b1 + b2;//这里该如何修改?
代码演示
public class ArithmeticoperatorDemo3 {
public static void main(String[] args) {
byte b1 = 10;
byte b2 = 20;
byte result = (byte)(b1 + b2);//强制转换
System.out.println(result);//30
}
}
public class ArithmeticoperatorDemo3 {
public static void main(String[] args) {
byte b1 = 100;//数据过大
byte b2 = 100;//数据过大
byte result = (byte)(b1 + b2);
System.out.println(result);//30
}
}