1.隐式类型转换
代码不需要经过任何处理,在代码编译时,编译器会自动处理。
特点:数据类型小的转换为数据类型大的时会自动进行。
int a = 100;
long b = 10L;
b = a; // a和b都是整型,a的范围小,b的范围大,将a赋值给b时,编译器会自动将a整型提升为Long类型,然后赋值
a = b; // 编译报错,long的范围比int的范围大,会数据丢失,不安全
//Java中对于字面值的直接赋值是允许的,前提是 没有超过表示范围,否则,就会检查!
byte c = 257;//编译错误,257超过了byte的数据范围,有数据丢失
byte c1 = 127;//OK,127没有超过byte的范围,编译器会隐式将100转化为byte类型
2.强制类型转换
代码需要经过一定的格式化处理,不能自动完成。
特点:数据类型大的转换为数据类型小的。
//强制类型转换
boolean flag = true;
a = (int)flag;//编译失败
int d = 10;
long d1 = 100L;
d1 = d;//隐式转换
d = (int)d1;//强转
byte b2 = (byte)257;//257默认为int,超过了byte的范围,需要强转,否则报错
3.注意事项
(1).不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换为表示范围较大的类型
(2).如果把范围大的类型赋值给范围小的类型时,需要强制类型转换,但是可能会精度丢失
(3).Java中对于字面常量的直接赋值是允许的,前提是没有超过表示范围,否则,就会检查!
(4).boolean类型不能和任何类型转换