Java从入门到精通(第7版)
上QQ阅读APP看书,第一时间看更新

3.5 数据类型转换

类型转换是将一个值从一种类型更改为另一种类型的过程。例如,可以将String类型的数据“457”转换为数值型,也可以将任意类型的数据转换为String类型。

如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换时,则会有信息丢失,有可能失败。

数据类型转换有两种方式,即隐式转换与显式转换。

3.5.1 隐式类型转换

从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作。这种类型的转换被称为隐式转换。下列基本数据类型会涉及数据转换,不包括逻辑类型和字符类型。这些类型按精度从低到高排列的顺序为byte < short < int < long < float < double。

例如,可以将int型变量直接赋值给float型变量,此时int型变量将隐式转换成float型变量。代码如下:

隐式转换也要遵循一定的规则来解决在什么情况下将哪种类型的数据转换成另一种类型的数据。表3.11列出了各种数据类型隐式转换的一般规则。

表3.11 隐式类型转换规则

下面通过一个简单实例介绍数据类型隐式转换。

【例3.11】使用隐式转换提升数值的精度(实例位置:资源包\TM\sl\3\11)

在项目中创建类Conver,在主方法中创建不同数值型的变量,实现将各变量隐式转换。

运行结果如下:

     byte型与float型数据进行运算结果为:579.12
     byte型与int型数据进行运算结果为:19050
     byte型与char型数据进行运算结果为:12
     double型与char型数据进行运算结果为:55.46546

技巧

要理解类型转换,读者可以这么想象,大脑前面是一片内存,源和目标分别是两个大小不同的内存块(由变量及数据的类型来决定),将源数据赋值给目标内存的过程,就是用目标内存块尽可能多地套取源内存中的数据。

3.5.2 显式类型转换

当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换运算(又称强制类型转换)。语法如下:

     (类型名)要转换的值

例如,将高精度数字转换为低精度数字。代码如下:

执行显式类型转换时,可能会导致精度损失。除boolean类型外,其他基本类型都能以显式类型转换的方法实现转换。

误区警示

当把整数赋值给一个byte、short、int、long型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换。例如:

byte b = (byte)129;

编程训练(答案位置:资源包\TM\sl\3\编程训练)

【训练7】输出连续的英文字母 使用char型声明'a'~'g',然后输出它们相加后的结果。

【训练8】货车装箱子 一辆货车运输箱子,载货区宽2米、长4米,一个箱子宽1.5米、长1.5米,请问载货区一层可以放多少个箱子?