基础数据类型的相互转换在 java 中 。对于基础的数据类型转换是学习的重点之一 。只有知道了转换规则才能避免转换过程中遇到的一些坑 。本篇就来说说数据类型之前的转换规则 。
对于基础类型的转换有两种方式 。一种由小到大的转换 。不会丢失精度 。另一种由大变小的强制转换 。有可能有丢失精度和出错 。
对于基础类型的转换 。Java 语言一共提供了 7 种数值类型进行相互转换 。
根据现有规则把数据类型的转换分为了两种情况 。一种是自动转换 。另一种是强制转换 。
转换规则(从小到大)
文章插图
文章插图
自动转换从小转到大的范围情况下可以自动转换 。也可以叫作隐式转换 。按照数据类型的从小到大自动进行转换 。
对于自动转换的规则遵守下面两个规则:
对于需要转换的数据类型必须要是转换前的数据类型兼容转换后的数据类型 。
转换后的数据类型的范围必须比转换前的数据类型范围大 。
代码演示:
文章插图
文章插图
bytebyteValue=https://www.wangchuang8.com/'a';//'a'ASCIIis97shortshortValue=byteValue;//97intintValue=shortValue;//97longlongValue=intValue;//97floatfloatValue=longValue;//97doubledoubleValue=floatValue;//97System.out.println(doubleValue);//97charcharValue='a';intintCharValue=charValue;//97System.out.println(intCharValue);
运行查看:
文章插图
文章插图
‘
以上是一级一级的往上转换 。所以不会出现问题 。哪怕是跳级也是可以的 。
比方说:
bytebyteVal='b';intintVal=byteVal;
或者是:
intintVal2=100;doubled=intVal2;
这样也没有问题 。但是如果是下面这样就有问题了 。
longlongVal=100;//这里会报错 。Typemismatch:cannotconvertfromlongtointintintVal3=longVal;
如果非要这样转 。并且转换前的数据也是能够和更小类型兼容 。就需要使用强制转换 。
强制转换强制转换 。代表着数据类型的转换默认无法进行转换 。所以需要显式的进行类型转换 。
强制类型转换的格式为在变量的名字前面加上括号写上基础类型 。
格式:(需要转换的基础类型)变量;
longlongValWait=100;intintConvert=(long)longValWait;
想要详细的了解强制类型转换 。需要先了解下面的这个图:
文章插图
文章插图
占用字节大的数据类型转换字节小的就需要强制转换 。并且转换的时候需要注意丢失精度的问题 。
让我看一个会丢失精度的代码例子:
文章插图
文章插图
定义个 short。规矩定义的规则我们可以得知 byte 的取值范围是: -128 到 127 。所以当我们定义了不在改取值范围的值时 。比方例子中的 128 就会丢失精度 。让我们看一下丢失的数值跑哪去了 。
首先可以看到 short 的字节是 2。也就是占用 16 bit 。但是 byte 只占用 1 位 。也就是 8 bit 。所以在转换的时候 。short 的前 8 bit 被丢了 。
文章插图
文章插图
并且在类型中 。最左侧的是符号位 。8 位的符号位也就是1 。在计算机处理二进制数的时候 。符号位 1 代表负值 。0 代表正值 。所以后面 7 位代表数据的值 。又因为负数在计算机中以补码形式存在的 。所以还需要转换成原码进行计算 。也就是符号位不变的情况下 。将后面 7 位二进制数即按位取反 。并在最后一位加 1 。
文章插图
文章插图
这个时候就遇到了一个特殊的情况也就是 -128 的来源 。因为 +0 和 -0 是一样的 。但是对于 0 带符号来说没有意义 。而且会有 [0000 0000] 和 [1000 0000] 两个原码 。所以也就有了现在的补码 。
推荐阅读
- 体育创作者是怎么发布象棋比赛视频的?
- 京东可以用支付宝吗 京东在9年前就已下架支付宝
- “身临棋境”全国象棋女子明星快棋表演赛,你认为冠军会属于谁?
- 人欲立而立人,人欲达而达人,这是儒家思想仁的核心,你怎么理解?
- dnf护石怎么获得 dnf护石获得方法
- 为什么有的人不到60岁就去世了,有的人到了80多岁依然很健康?
- 如何评价法家、道家、儒家、墨家的中心思想?
- 一般上门修电脑多少钱 上门修电脑要200给500
- 有哪些经常被误读的字?