- 21天学通Java
- 庞永庆 庞丽娟等编著
- 756字
- 2024-11-28 19:16:58
2.2 数据类型间的转换
在日常生活中,斤和两都是重量单位,一斤可以转换为十两。在Java中,整型、浮点型等都是基本的数据类型,它们是能够进行数据类型转换的。下面介绍不同数据类型之间的数据转换方式。
2.2.1 自动转换
自动转换就是不需要明确指出所要转换的类型是什么,而是由Java虚拟机自动转换。转换的规则就是小数据类型变大数据类型,但大数据类型的数据精度有时会被破坏。下面看一段代码。
//定义各种数据类型 int i = 123; char c1 = 22; char c2 = 'c'; byte b = 2; //自动转换的数据类型 int n = b; long l = i;
请读者思考把byte类型转换成float类型时,为什么会影响数据的精度?
2.2.2 强制转换
强制转换是带有强制性的,明明不能自动转换,而强制性地进行转换。看下面的例子。
//定义数据类型 int i = 22; long L= 33; //强制转换数据类型 char c = (char)i; int n = (int) L;
其中,i原来是一个int整型,但要将它强行转换成char字符型。同样I原来是一个long型,但要将它强行转换成int整型。通过前面的学习已经知道,long型的取值范围最大值可以为2的63次方减1,而int型的取值范围最大值只有2的31次方减1。所以如果L为一个大于2的31次方减1,在强制类型转换时就会丢失精度,使数值发生变化,这也是读者需要注意的地方。
注意:强制类型转换是会丢失精度的,经常会发生转换后数据发生变换的情况。但是在一些必要的地方又必须进行强制类型转换。所以要谨慎和准确地使用强制类型转换。
2.2.3 隐含转换
隐含转换和自动转换很相似,Java虚拟机根据数据类型的位数来判断此数据类型是否能装载此数据,如果能,Java就默认进行了转换。举例说明如下:
//例子1 byte b = 111; //例子2 int i = 222; byte c = (byte) i;
上面语句中有两个转换,一个是111转换成byte类型的数据库,因为byte类型的数据位数能装载下111,所以能进行转,这就是隐含转换。把值为222的变量:转换成byte类型的变量c就不能进行隐含转换,因为能进行隐含转换的只能是常量而不能是变量。