我是靠谱客的博主 喜悦枕头,最近开发中收集的这篇文章主要介绍Java基本类型转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单的类型自动转换和强转这里就不说了,这里就说一个大类型向小类型自动转换的问题.

常识:

对于整型,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基本类型转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部