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
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号