数据类型转换

1.自动转换:
当满足以下条件时,Java 会自动进行类型转换:

  • 转换后的类型要比原类型有更大的容量。
  • 转换过程不会造成数据丢失。
  • 基本数据类型的自动转换顺序(按容量从小到大排列)是:byte → short → char → int → long → float → double

2.强制转换:
当需要把容量大的类型转换为容量小的类型时,就需要使用强制类型转换。不过,这种转换可能会导致数据精度丢失或者溢出。

  • 格式:目标类型 变量名 = (目标类型) 原类型变量;
    • EX:
      double d = 3.14;
      int i = (int) d; // 强制将double类型转换为int类型,结果为3,小数部分被舍弃
      

  • 注意:转换时的注意要点:
    • 精度丢失:在将浮点数转换为整数时,小数部分会被直接舍弃。
    • 溢出风险:当把大范围的整数强制转换为小范围的整数时,可能会得到意想不到的结果。
      • EX:
        int largeNum = 300;
        byte b = (byte) largeNum; // 结果为44,这是因为发生了溢出
        
    • boolean 不可与其他基本类型互相转换
      • EX:
        boolean b = true;
        int num = (int) b; // 编译错误:无法将boolean转换为int
        double d = 1.0;
        boolean bool = (boolean) d; // 编译错误:无法将double转换为boolean
        

  • 其他问题
    public class Demo2 {
       public static void main(String[] args) {
    		//操作比较大的数时候,注意溢出问题
    		//数字之间可用下划线分割,增加可读性,下划线不会被输出
    		int money = 10_0000_0000;
    		int years = 20;
    		int total1 = money * years;
    		System.out.println(total1);//输出为:-1474836480,数据溢出
    		System.out.println("=================================");
    		long total2 = money * years;
    		System.out.println(total2);//输出为:-1474836480,money和years在输出前已经出现溢出问题
    		System.out.println("=================================");
    		long total3 = money * (long)years;
    		System.out.println(total3);//输出为:20000000000,把一个转换为long即可
    		//写代码时,L写大写,避免为数字1混淆
    	}
    }