数据类型转换

强类型语言,运算时要用到类型转换
//低容量  ----------------------------------------> 高容量
byte -> short -> char -> int -> long -> float -> double 

PS:

  • 类型从高 -> 低赋值,要强制转换
  • 类型从低 -> 高赋值,Java会自动转换
  • 布尔值(boolean)不能转换
  • 不能转换不相关对象类型。
  • 类型转换过程中会出现:1. 精度不准确;2. 内存溢出问题。

运算中,不同类型的数据要先转换成同一类型,再进行运算。

1. 高转低

示例:

public class Demo04 {
    public static void main(String[] args) {
        int i = 128 ;
        //byte b = i ; //报错,i是整型,b是byte
        byte b = (byte) i ; //强转,会出现内存溢出的问题
        System.out.println(b);

    }
}

输出:

-128
可以看到,不同类型直接赋值会报错。

强制类型转换,高转低会出现数值过大,内存溢出问题。

2. 低转高

示例:

public class Demo04 {
    public static void main(String[] args) {
        byte b1 = 126 ; 
        double d = b1; //低转高,自动完成
        System.out.println(d);
    }
}

输出:

126.0

3. 强转导致精度不一

示例:

public class Demo04 {
    public static void main(String[] args) {
        System.out.println((byte)32.3f); //float
        System.out.println((byte)41.93); //double 浮点类型会产生精度错误
    }
}

输出:

32
41
从结果可以看出,float,double精度都丢失了。

4. 转换例子

public class Demo04 {
    public static void main(String[] args) {
        //字符转换
        char c = 'a';
        int ic = c + 1 ; //可以直接赋值,说明int容量比char大。
        System.out.println(ic); //输出98
        System.out.println((char)ic); //输出b
    }
}

输出:

98
b

5. 大数据运算要注意强转的内存举出问题

示例:

public class Demo05 {
    public static void main(String[] args) {
        int money = 10_0000_0000;
        int years = 20;

        int total = money * years ; //输出 -1474836480,超出了int的最大值20E
        long total1 = money * years ; //输出 -1474836480,计算后的结果已经溢出,再强转没意义;
        long total2 = (long)money * years; //输出 20000000000,运算时要先强转为最大容量long,再运算能得出正确结果。

        System.out.println(total);
        System.out.println(total1);
        System.out.println(total2);
    }
}

输出:

-1474836480
-1474836480
20000000000
文章目录