Java数据类型转换


数据类型转换

Java中数据类型按内存大小

低--------------------------------------------->高
byte,short,char--> int --> long --> float --> double
  • Java中数据运算,不同数据类型的数据首先要转换成同一类型,然后进行计算
  • 自动转换过程会将较小内存的数据类型转换成较大类型的数据
  • 由低到高可以自动转换
  • 由高到低需要强制类型装换 (类型)变量名
public class Demo04 {
    public static void main(String[] args) {
        int i1 = 128;
        byte b1 = (byte)i1; //强制类型转换
        int  i2 = b1;       //自动类型转换
        /*
        强制类型转化需注意内存溢出的问题
         */
        System.out.println(i1); // 128
        System.out.println(b1); // -128 byte 最大支持127 赋值128时内存溢出
        System.out.println(i2); 
        float f1 = 24.57F;
        double d1 = -25.36;
        System.out.println((int)f1);    // 24 精度丢失
        System.out.println((int)d1);    // -25 精度丢失
    }
}

注意点

  • 不能对布尔值进行转换
  • 不能把对象类型转换为不相干的数据类型
  • 在将高容量数据类型的数据转换为低容量数据类型的时候,需要强制类型转换
  • 转换的时候可能存在数据溢出或者精度的问题

面试问题

  • 操作比较大的数据的时候,需要注意内存溢出的问题;

  • 两个数进行计算,如果两个数的类型相同,计算结果的数据类型与两个数的类型相同

  • 两个数的类型不同,计算结果为较大容量的数的类型

  • 对两个数的计算结果数据类型转换需注意转换前的数据是否存在内存溢出问题,一般先对其中一个数据进行转换,然后再计算

public class Demo05 {
    // 操作较大数内存溢出问题
    public static void main(String[] args) {
        // jdk 7的新特性 数字之间可以使用下划线分割
        int salary = 10_0000_0000; // 等价于 int salary = 1000000000;
        int iyear = 20;
        System.out.println(salary); // 输出结果:1000000000
        System.out.println(iyear);
        System.out.println(iyear * salary); // 输出结果:-1474836480 内存溢出

        System.out.println((long)(iyear * salary));     // -1474836480
        System.out.println((long)iyear * salary);       // 20000000000
        System.out.println(iyear * (long)salary);       // 20000000000
        /*
            两个数进行计算,如果两个数的类型相同,计算结果的数据类型与两个数的类型相同
            两个数的类型不同,计算结果为较大容量的数的类型
            对两个数的计算结果数据类型转换需注意转换前的数据是否存在内存溢出问题,一般先对其中一个数据进行转换,然后再计算
         */
    }
}

相关