类型转换

类型转换

整型类型

类型自动提升

如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。

public class Main {
    public static void main(String[] args) {
        short s = 1234;
        int i = 123456;
        int x = s + i; // short自动转型为int
        short y = s + i; // 编译错误!
    }
}

强制转换类型

范围的整型转换为范围的整型。

public class Main {
    public static void main(String[] args) {
        int i1 = 1234567;
        short s1 = (short) i1; // -10617
        System.out.println(s1);
        int i2 = 12345678;
        short s2 = (short) i2; // 24910
        System.out.println(s2);
    }
}

  • 转型后超出范围的会被舍去,所以强制转换的结果可能会是错误的。

浮点数

溢出

整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:

  • NaN表示Not a Number
  • Infinity表示无穷大
  • -Infinity表示负无穷大

类型提升

运算中其中一个数是整型,那么整型可以自动提升到浮点型

public class Main {
    public static void main(String[] args) {
        int n = 5;
        double d = 1.2 + 24.0 / n; // 6.0
        System.out.println(d);
    }
}
  • 在复杂的四则运算中,两个整数的运算不会出现自动提升

    double d = 1.2 + 24 / 5; // 5.2   24/5=4
    

强制转型

将浮点数转型为整型时,小数部分会被丢掉。

int n1 = (int) 12.3; // 12
int n2 = (int) 12.7; // 12
int n2 = (int) -12.7; // -12
int n3 = (int) (12.7 + 0.5); // 13
int n4 = (int) 1.2e20; // 2147483647    如果转型后超过了整型能表示的最大范围,将返回整型的最大值

如果运算要四舍五入,对浮点数加上0.5在强制转型

public class Main {
    public static void main(String[] args) {
        double d = 2.6;
        int n = (int) (d + 0.5);
        System.out.println(n);
    }
}
posted @ 2022-04-17 21:38  兔mm  阅读(33)  评论(0编辑  收藏  举报