Java数值类型在整个java体系中是必不可少的一部分,一共可以分为8种数值类型。在java程序员的开发工作中,程序会出现将一种数值类型转换为另一种数值类型的需要,那么这些java数值类型之间转换的规则是怎样的,该如何转换,所有java数值类型之间都可以两两转化吗,这一系列的问题这篇文章给你答案。
在介绍如何在java数值类型之间转换前,先来回顾一下java数值都有哪些类型。(1)int长度数据类型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits);(2)float长度数据类型有:单精度(32bits float)、双精度(64bits double);(3)boolean类型变量的取值有:ture、false;(4)char数据类型有:unicode字符,16位。
在这些数值类型之间不是所有的类型都可以两两转换,Java数值类型之间转换可以用下面一张图来表示:
下面对这张图进行说明:图中有6个实箭头,表示无数据丢失的转换;有3个虚箭头,表示可能有精度损失的转换。例如,123 456 789是一个大整数,它所包含的位数比float类型所能够表达的位数多 。当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度。
int n = 123456789;
float f = n; //f is 1.23456792EB
当使用上面两个数值进行二元操作时(例如n+f,n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
(1)如果两个操作数中有一个是double类型的,那么另一个操作数将会转换为double类型;
(2)否则,如果其中一个操作数是float类型,那么另一个操作数将会转换为float类型。
(3)否则,如果其中一个操作数是long类型,那么另一个操作数将会转换为long类型
(4)否则,两个操作数都将被转换为int 类型。
强制类型转换:
在上面可以看到,在必要的时候,int类型的值将会自动地转换为double类型 。但另一方面,有时也需要将double转换成int 。在java中,允许进行这种数值之间的类型转换,当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast)实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,随后紧眼待转换的变量名。例如:
double x = 9.997;
int nx = (i nt)x:
这样,变量nx 的值为10,当调用round的时候,仍然需要使用强制类型装换(int)。其原因是round方法返回结果为long类型,由于存在信息丢失的可能性,所以只有显示的强制类型转换才能够将long类型转换成int类型。如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会被截断成一个完全不同的值,例如(byte ) 300 的实际值为44。
最后注意一下java数据类型之间转换的规则:(1)java中所有的数字变量都是有符号(正负)的;(2)不允许类型的随意转换。只有数字变量可以进行转换,但是不能随意;(3)带有小数点的数字变量默认都为double型;(4)定义float型必须进行强制类型转换;(5)所占字节数小的数字型变量赋值给所占字节数比它大的类型时不用强制类型转换,此时是自动转型;(6)int型变量赋值给char型变量时,JVM会以int型变量值到ASCII码表中查找出所对应的字符,再赋值给char型变量。反之也是。
以上就是对java数值类型之间转换的介绍,数值类型转换是比较基础的内容,在java面试中也会考察到,希望这篇文章可以不同程度的帮助到大家,可以在相关的java培训课程中学更多数值类型之间转换的操作问题,扩充自己的java知识库,提高java水平。
HelloWorld10-31 08:24
军哥08-12 23:29
江湖人称小李白12-10 10:41
IT逐梦者08-17 21:43
HelloWorld11-06 11:19