第16节 大类型向小类型转换
1、概述
1、大类型向小类型转换叫做强制类型转换,简称强转,有时也称为显示类型转换。
举例:变量b是字节类型,现在我们做一个变量b和10相加的运算,并且将这个结果重新赋值给变量b
Java语言在进行整数运算时,默认是按照int类型来处理的,因此变量b+10的结果是int类型,虽然这个值没有超过byte类型最大值,但是Java语言仍然要求b+10的结果,赋值给字节类型变量时需要做强制类型转换。强转的写法是写对小括号,括号里写上要转换的类型的关键字,后面是转换的表达式。
注意:如果我们是做5和10相加的结果,这里b就无需做强制类型转换。因为java语言有一个特点,Java语言对于5+10这种明显的可以得出结果的字面量的运算,在编译期间直接将五和十相加,如果结果没有超过字节类型的最大值,那么就没有任何错误,结果15会在编译期间就保存在变量b中。
如果是变量b和10相加,那么java语言不能确定变量b中的值肯定是5,所以b+10是在解释运行期间才进行计算,那么这个结果就按默认的int类型来处理,所以如果是向字节类型变量赋值需要做强制类型转换。
2、强制类型转换时要注意边界数风险的问题,意思是大类型向小类型转换时,有可能数据位成为小数的高位的符号位,也有可能超过小类型存储的最大值。
2、大类型向小类型转换案例
我们定义一个变量i是int类型,存储的数据129,如果我们将变量i的值赋值给字节类型b,首先需要做强制类型转换,把i的值强转成字节类型,在赋值给变量b。
我们知道字节类型最大数是正127,那么129存储的变量b中,它的值肯定不再是129。
我们按取反加一来计算,就是后面七位全是1,所以它的结果是-127,这就是大类型的数据位转换为小类型的符号位。
将257转化为二进制就是,1后面有八个0再加1就是257,如果把这九位数存在变量b中,我们知道字节类型变量只能存八位,所以最高位的1将丢失,只剩下后八位,后八位的结果就是+1,因此257转换为字节类型后结果是+1,因为最高位已经丢失掉了。