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

3.5 类型转换

在Java程序中,不同基本类型的值经常需要在不同类型之间进行转换。Java语言提供的7种数值类型之间可以相互转换,有自动类型转换和强制类型转换两种类型转换方式。

知识点讲解:

3.5.1 自动类型转换

如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,这种方式被称为自动类型转换。当把一个取值范围小的数值或变量直接赋给另一个取值范围大的变量时,系统可以进行自动类型转换。

Java中所有数值型变量之间可以进行类型转换,取值范围小的可以向取值范围大的进行自动类型转换。就好比有两瓶水,当把小瓶里的水倒入大瓶时不会有任何问题。Java支持自动类型转换的类型如图3-24所示。

图3-24 自动类型转换图

在图3-24所示的类型转换图中,箭头左边的数值可以转换为箭头右边的数值。当对任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转换为字符串类型,尽管字符串类型不再是基本类型,而是引用类型。因此,如果希望把基本类型的值转换为对应的字符串,可以对基本类型的值和一个空字符串进行连接。

实例3-22

演示Java的自动类型转换

源码路径:daima\3\zidong.java

实例文件zidong.java的主要实现代码如下所示。

        public static void main(String[] args) {
                int a  = 6;     //定义int型变量a
                float f = a;    //int可以自动转换为float型
                System.out.println(f);     //输出6.0
                byte b = 9;     //定义一个byte型的整数变量
                //下面这行代码将出错, byte型不能自动转换
                //为char型
                //char c = b;
                //下面这行代码正确,byte型变量可以自动转换为
                double型
                double d = b;
                System.out.println(d); //此行将输出9.0
        }

拓展范例及视频二维码

范例3-22-01:把基本类型转换为字符串

源码路径:演练范例\3-22-01\

范例3-22-02:判断用户名是否正确

源码路径:演练范例\3-22-02\

执行后的结果如图3-25所示。

图3-25 自动类型转换后的结果

3.5.2 强制类型转换

如果希望把图3-24中箭头右边的类型转换为左边的类型,则必须使用强制类型转换。Java中强制类型转换的语法格式如下所示。

        (targetType)value

强制类型转换的运算符是圆括号“( )”。下面的实例演示了使用强制类型转换的过程。

实例3-23

演示Java的强制类型转换

源码路径:daima\3\qiangzhi.java

实例文件qiangzhi.java的主要实现代码如下所示。

        public static void main(String[] args) {
                int iValue = 233;          //定义int型变量iValue的初始值是233
                //强制把一个int类型的值转换为byte型
                byte bValue = (byte)iValue;
                //将输出-23
                System.out.println(bValue);
                double dValue = 3.98;
                //强制把一个double类型的值转换为int型
                int toI = (int)dValue;
                //将输出3
                System.out.println(toI);
        }

拓展范例及视频二维码

范例3-23-01:使用基本强制类型转换

源码路径:演练范例\3-23-01\

范例3-23-02:将浮点数强制转换为整型

源码路径:演练范例\3-23-02\

在上述代码中,当把一个浮点数强制类型转换为一个整数时,Java将直接截断浮点数的小数部分。除此之外,上面的程序还把233强制类型转换为byte型整数,从而变成-23,这就是典型的溢出。执行后的结果如图3-26所示。

图3-26 强制类型转换后的结果