首页 > 编程笔记 > Java笔记 阅读:37

Java数据类型转换(自动转换和强制转换)

Java 有很多种数据类型,比如整形(byte、short、int 和 long)、浮点型(float 和 double)、字符型(char),这些类型之间可以相互转换,主要分为自动转换和强制转换两类。

Java自动类型转换

自动类型转换是指在 Java 中,当把一个数据类型的值赋给另一个数据类型的变量时,如果目标数据类型的范围大于源数据类型的范围,Java 会自动执行类型转换,这种转换也称为隐式转换。

自动类型转换发生的前提是目标数据类型可以容纳源数据类型的所有值,不会导致数据丢失。这是因为目标数据类型的范围更大,可以表示比源数据类型更大范围的数值。

在自动类型转换中,不需要特别声明,编译器会自动进行处理。这样的特性使得编程更加便捷,不需要显式地进行类型转换。

自动类型转换规则如下。

数字型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。

char 类型比较特殊,char 自动转换为 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。

自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型转换,在运算中往往是先将数据类型转换为同一类型,然后再进行计算。

数学计算时的自动类型转换规则如下表所示。

表:自动类型转换规则
操作数 1 类型 操作数 2 类型 转换后的类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

示例如下:
public class Main {
    public static void main(String[] args) {
        int num1 = 10;
        long num2 = num1; // 自动将 int 类型转换为 long 类型

        float num3 = 3.14f;
        double num4 = num3; // 自动将 float 类型转换为 double 类型

        char ch = 'A';
        int asciiValue = ch; // 自动将 char 类型转换为 int 类型,存储的是'A'的ASCII码值

        int num5 = 5;
        double num6 = 3.14;
        double result1 = num5 + num6; // 自动将 int 类型 num5 转换为 double 类型后再相加

        char ch2 = 'A';
        int num7 = 10;
        int result2 = ch2 * num7; // 自动将 char 类型的 ch2 转换为 int 类型后再相乘

        long num8 = 1000L;
        float num9 = 3.5f;
        float result3 = num8 + num9; // 自动将 long 类型的 num8 转换为 float 类型后再相加

        System.out.println("num2: " + num2); // 输出结果为 10
        System.out.println("num4: " + num4); // 输出结果为 3.140000104904175
        System.out.println("asciiValue: " + asciiValue); // 输出结果为 65
        System.out.println("result1: " + result1); // 输出结果为 8.14
        System.out.println("result2: " + result2); // 输出结果为 650
        System.out.println("result3: " + result3); // 输出结果为 1003.5
    }
}
代码运行结果如下:

num2: 10
num4: 3.140000104904175
asciiValue: 65
result1: 8.14
result2: 650
result3: 1003.5

Java强制类型转换

强制类型转换是指在 Java 中,将一个数据类型强制转换为另一个数据类型。

当进行强制类型转换时,需要使用目标数据类型的括号进行声明,以明确指定要进行的转换操作。强制类型转换的场景通常是将范围大的数据类型转换为范围小的数据类型,或者在需要精确控制数据类型的情况下进行转换。

强制类型转换的语法格式:

(目标类型)value

强制类型转换的注意事项:
示例代码如下:
// 强制类型转换
public class Main {
    public static void main(String[] args) {
        int decimalInt = 10;
        byte byteInt = (byte) decimalInt; // 将 int 类型强制转换为 byte 类型

        double float1 = 2.1543276e2;
        long longInt = (long) float1; // 将 float 类型强制转换为 long 类型
        System.out.println(longInt); // 输出 215,小数部分被截掉

        float float2 = (float) float1; // 将 double 类型强制转换为 float 类型

        long long1 = 999999999999L;
        int int1 = (int) long1; // ① 将 long 类型强制转换为 int 类型,精度降低
        System.out.println(int1); // 输出 -727379969
    }
}
代码运行结果如下:

215
-727379969

上述代码 ① 处在进行强制类型转换时,发生了精度降低,这是因为 long1 变量太大,当大宽度数值转换为小宽度数值时,大宽度数值的高位被截掉,这样就会导致数据精度丢失。

相关文章