数据类型转换分为两种,一种是自动类型转换,还有一种是强制类型转换。
整体规则大致了解
(1)基本数据类型除了布尔型以外,剩余7种类型可以相互转换。
(2)当取值范围小的类型赋给取值范围大的类型,构成自动类型转换。
byte short char int long float double(取值范围从小到大)
(3)当取值范围大的类型使用强制类型转换给取值范围小的类型的时候,但是可能会存在精度丢失。
(4)当多种数据类型进行混合运算时,则选择为取值范围大的类型然后再进行计算。
自动类型转换
1 定义:
Java程序在进行赋值或运算时,自动将精度小的转换成精度大的。
2 精度排序:
char —> int —> long —> float —> double
byte —> short —> int —> long —> float —> double(精度由小到大排序)
注意:在这个里面char byte short是平级的不能相互自动转换
3 使用规则:
- 当有多种数据混合运算时,系统首先自动将所有数据转换成容量最大的数据类型,再进行计算。
- 当把精度大到数据类型赋给精度小的会报错。注意在进行数值赋值时,先判断是否在该小精度数据类型范围内,如果是就可以,如果是进行变量赋值,就不行。
- byte,short和char之间不能相互自动转换。
- byte,short和char三者可以计算,计算时转换成为int类型。
- boolean类型不参与转换。
- 自动提升原则:表达式结果的类型自动转换成操作数中最大的类型。
强制类型转换
1 定义:
将容量大的数据类型装换成容量小的数据类型。使用时要加上强制转换符,但可能造成精度降低或溢出。
2 使用规则:
强制类型转换只对最近的操作数有效,往往会使用小括号提升优先级。
char类型可以保存int的常量值,但不能保存int的变量值,需要强制转换。
1 public class demo{
2 public static void main(String []args){
3 int x = (int)(10*3.5+6*1.5);//正确
4 int y = (int)10*3.5+6*1.5;//报错
5 }
6 }