博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java和Android开发学习指南(第2版)》—— 2.7 基本类型转换
阅读量:6101 次
发布时间:2019-06-20

本文共 1374 字,大约阅读时间需要 4 分钟。

本节书摘来异步社区《Java和Android开发学习指南(第2版)》一书中的第2章,第2.7节,作者:【加】Budi Kurniawan,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.7 基本类型转换

在处理不同的数据类型的时候,我们常常需要进行转换。例如,将一个变量的值赋给另一个变量,就涉及转换。如果两个变量具有相同的类型,赋值总是会成功。从一种类型到相同类型的转换,叫作等同转换(identity conversion)。例如,如下的转换保证能够成功:

int a = 90; int b = a;```然而,向不同的类型转换则无法保证成功,甚至不一定能够那么做。基本类型转换还有另外两种形式,即加宽转换(widening conversion)和收窄转换(narrowing conversion)。####2.7.1 加宽转换当从一种基本类型向另一种基本类型转换的时候,如果后者的大小和前者相同或者更大,就会发生加宽转换;例如,从int(32位)到long(64位)的转换。在如下情况中,进行加宽转换:

从byte向short、int、long、float或double转换。

从short向int、long、float或double转换。
从char向int、long、float或double转换。
从int向long、float或double转换。
从float向double转换。`
从一种整数类型向另一种整数类型的加宽转换,不会有信息丢失的风险。同样的,从float向double的转换也会保留所有的信息。然而,从int或long向float的转换,可能会导致精度丢失。

加宽的基本类型转换是隐式地发生的,不需要在代码中做任何事情。例如:

int a = 10; long b = a; // widening conversion```####2.7.2 收窄转换收窄转换发生在从一种类型到另一种拥有较小的大小的类型的转换中,例如,从long(64位)到int(32位)的转换。通常,收窄转换在如下的情况中发生:

从short向byte或char。

从char向byte或short。
从long向byte、short或char。
从float向byte、short、char、int或long。
从double向byte、short、char、int、long或float。`
和加宽基本类型转换不同,收窄基本类型转换必须是显式的。需要在圆括号中指定目标类型。例如,如下是从long向int的收窄转换。

long a = 10; int b = (int) a; // narrowing conversion```第2行中的(int)告诉编译器,应该发生收窄转换。如果被转换的值比目标类型的容量还要大的话,收窄转换可能导致信息丢失。前面的例子并不会导致信息丢失,因为10对一个int类型来说足够小。然而,在如下的转换中,由于9876543210L对一个int类型来说太大了,会导致一些信息丢失。

long a = 9876543210L; `

int b = (int) a; // the value of b is now 1286608618
有可能导致信息丢失的收窄转换,在你的程序中将会引入一个缺陷。

转载地址:http://xosza.baihongyu.com/

你可能感兴趣的文章
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
iOS13-适配夜间模式/深色外观(Dark Mode)
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>