Java 基础教程

表达式数字类型转换

在表达式的计算过程中,经常会出现将数值从一种数字类型转换为另一种数字类型,如下图:

上图中,有6个实心箭头,表示无信息丢失的转换。有3个虚线箭头,表示可能有精度损失的转换。例如:

public class Demo {

    public static void main(String[] args) {
        int a = 123456789;
        float b = a;
        System.out.println("a=" + a);
        System.out.println("b=" + b);
    }

}

运行示例,输出结果如下:

a=123456789
b=1.23456792E8

当将 int 类型转换为 float 类型时,将会得到同样大小的结果,但却失去了一定的精度。

当将两个数值(一个整数、一个浮点数)进行操作时,需要先将两个操作数转换为同一种类型,然后再进行计算。转换规则如下:

  • 如果两个操作数中有一个是 double 类型,另一个操作数需要转换为 double 类型

  • 如果两个操作数中有一个是 float 类型,另一个操作数需要转换为 float 类型

  • 如果两个操作数中有一个是 long 类型,另一个操作数需要转换为 long 类型

  • 最后,两个操作数都将转换为 int 类型

示例:

public class Demo {

    public static void main(String[] args) {
        int a = 1;
        long b = 2L;
        float c = 1.0f;
        double d = 2.0D;
        short e = 1;
        byte f = 1;
        // 如果两个操作数中有一个是 double 类型,另一个操作数需要转换为 double 类型
        double r1 = a + d;
        System.out.println("r1=" + r1);
        // 如果两个操作数中有一个是 float 类型,另一个操作数需要转换为 float 类型
        float r2 = a + c;
        System.out.println("r2=" + r2);
        // 如果两个操作数中有一个是 long 类型,另一个操作数需要转换为 long 类型
        long r3 = a + b;
        System.out.println("r3=" + r3);
        // 最后,两个操作数都将转换为 int 类型
        int r4 = a + e + f;
        System.out.println("r4=" + r4);
    }

}

运行示例,输出结果如下:

r1=3.0
r2=2.0
r3=3
r4=3

强制类型转换

前面介绍了表达式中数据类型的自动转换。但是,在必要的时候,我们需要进行类型强制转换,即使丢失精度。

从低级数值类型到高级数值类型之间的转换称为提升转换。例如:byte 转换 short、short 转换 int、int 转换 long、float 转换 double 等。

从高级数值类型到低级数值类型之间的转换称为降格转换。例如:long 转换 int、short、byte,doubel 转换 float 等。

强制数值类型转换格式为:

(目标数据类型)<表达式>

示例:

public class Demo {

    public static void main(String[] args) {
        int a = (int)3.14f;
        System.out.println("a=" + a);

        int b = (int)1890L;
        System.out.println("b=" + b);

        float c = (float)a + b;
        System.out.println("c=" + c);

        byte d = (byte)a;
        System.out.println("d=" + d);
    }

}

运行示例,输出结果如下:

a=3
b=1890
c=1893.0
d=3
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号