类型转换分为 自动类型转换 和 强制类型转换.
自动类型转换指的是把一个表示数据范围小的 数值 或者 变量 赋值给另一个表示数据范围大的变量,
顺着箭头方向能进行自动类型转换.
举了一个例子,double d等于10,10是一个整数,double 是一个浮点数,因为整数能够表示的数据范围是小于浮点数能够表示的数据范围.
数据范围从小到大的流程是如下图,从小到大的这两条线都是可以的.
但是byte 和 short 不能直接到char 做自动类型转换,而且这里列出的是7种基本数据类型,都是数值型的类型转换, 布尔是非数值型的, 所以布尔不能参与进来.
通过代码来验证一下自动的转换,首先写上自动类型转换,double d=10,
然后编译运行一下,控制台输出了10.0,
也就是本身是一个整数10,把它赋值给double类型之后,把10 自动转换为一个浮点数类型,输出的时候带了一个点0.
再来定义byte类型的变量,把一个byte类型的变量赋值给一个short类型的变量,
编译一下, 编译没有报错,说明byte 可以向short 进行自动类型转换.
int i = b,
没报错, 说明byte 可以向int 进行自动类型转换.
下面试试byte 类型向 字符类型 char 转换.
编译报错了,说不兼容的类型.
写上一个注释.
把一个表示数据范围大的 数值 或者 变量 赋值给另一个表示数据范围小的变量,这叫强制类型转换.
举一个例子,88.88是个浮点数,k是个int 类型的整数,在这里加了一个强转,就可以将float 类型强转为int 类型.
写代码来测试一下,先不写强制转换,
编译一下,现在编译报错了,说它是不兼容的类型,从double转换到int 可能会有损失, 不行.
加上强制类型转换,
现在编译不报错了,说明 float 类型可以强转为int 类型.
强转之后,
k最终的结果是88.
强制类型转换做完之后,把小数点后面的数字给弄没有了,那这肯定不合理的, 所以强制类型转换虽然可以做,但是不建议,因为会有数据的丢失.