概述
简单的类型自动转换和强转这里就不说了,这里就说一个大类型向小类型自动转换的问题.
常识:
对于整型,Jvm虚拟机默认为int类型。
对于浮点型,Jvm虚拟机默认为double类型;
自动转换 - 将较小的类型转换为较大的类型byte-> short-> char-> int-> long-> float->double
手动转换 - 将较大的类型转换为较小的类型double-> float-> long-> int-> char-> short->byte
这时就有一个问题,整数默认是int类型,那么为何可以将整数直接赋值给byte/short,当然前提是整数在byte/short的取值范围内,答案是jvm在底层自动进行了转换
那么这就引申出了另一个问题,浮点数默认是double类型,为何不能将浮点数直接复制给float变量,
而必须用F/f指明是float浮点数才可以,也就是说jvm为何不会自动将double转化为float,就像自动将int转化为byte/short一样
答案:
计算机并不能识别除了二进制数据以外的任何数据。无论我们使用何种编程语言,在何种编译环境下工作,都要先 把源程序翻译成二进制的机器码后才能被计算机识别。以上面提到的情况为例,我们源程序里的2.4是十进制的,计算机不能直接识别,要先编译成二进制。但问 题来了,2.4的二进制表示并非是精确的2.4,反而最为接近的二进制表示是2.3999999999999999。原因在于浮点数由两部分组成:指数和尾数,这点如果知道怎样进行浮点数的二进制与十进制转换,应该是不难理解的。如果在这个转换的过程中,浮点数参与了计算,那么转换的过程就会变得不可预 知,并且变得不可逆。我们有理由相信,就是在这个过程中,发生了精度的丢失。而至于为什么有些浮点计算会得到准确的结果,应该也是碰巧那个计算的二进制与 十进制之间能够准确转换。而当输出单个浮点型数据的时候,可以正确输出;
在系统中使用的数字一般都是十进制,但计算机只能将其转化为二进制进行识别,那么问题来了,许多十进制浮点数是无法精确的转化为二进制数的,只能转化为最接近的二进制,那么jvm将double自动转化为float时就会直接造成精度丢失,这在程序设计中是不被允许的.
最后
以上就是喜悦枕头为你收集整理的Java基本类型转换的全部内容,希望文章能够帮你解决Java基本类型转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复