31.非boolean简单数据类型之间的数据转换
在Java程序中,一些不同的数据类型之间可以进行数据类型的相互转换。
比如,有一个int类型的数据,赋给一个long类型的变量,或者反之。
虽然它们可以相互转换,但是,因为各种数据类型的表数范围是不一样的,所以,在转换的过程中,有一些地方需要注意。
这就类似于我们将水(数据)从一个容器(某种数据类型)倒入到另一个容器(另一种数据类型)一样,因为容器的大小不同,能够装盛的水也是不同的。如果将从小容器中的水倒入到大容器中,那不会有什么问题,但是,如果将大容器中的水倒入到小容器中,就可能会造成部分水溢出。
同样的,在数据类型转换上面,也有类似的问题,如果将表数范围比较小的数据类型数据转换成表数范围大的数据类型,则可以顺利转换,反之,则有可能发生数据的溢出(损失一部分信息)。
char
-> int -> long ->float->double
byte -> short
其中,int也可直接转化为float或者double,long也可直接转化为double,这是因为float和double的表数范围都大于所有的整型数据。
如果数据的转换按照上面所示的方式来完成,则程序会自动转换,不需要在程序中干预,这种转换也成为“扩展转换(Widening Conversion)”。
但是,如果不按照图中的方向来转换,则可以通过“强制类型转换”的方式来完成,此时,可能会引起信息的丢失。
当按照上面箭头所示的反方向来转换时,非常有可能造成数据精度的损失,这种转换也经常称为“缩小转换(Narrowing Conversion)”。
例如:int类型的数据在必要时可以自动转换成double的数据,但是,如果需要将double类型的数据转换成int类型的数据,则需要通过强制类型转换来完成。
double d = 1.2345;
int i = (int)d;
这样,就可以将double类型的数据d转换成int类型的数据,此时,i的值为1,显然,小数后面的值都丢失了。
上一篇: HtmlUnit 2.4发布: headless java 浏览器
下一篇: 32.Java引用类型