文章目录

  • 一、自动类型转换
  • 二、强制类型转换
  • 三、示例
  • 四、数据类型转换的特例:字符串类型
  • 五、示例


一、自动类型转换

①把存储范围小的类型的值赋值给存储范围大的类型的变量,自动可以完成升级
	byte->short->int->long->float->double
			char->
	②boolean不参与
③byte,short,char如果进行算术运算都会自动升级为int

二、强制类型转换

①把存储范围大的类型的值,赋值给存储范围小的类型变量时,需要强制类型转换
double->float->long->int->short->byte
						->char
强制类型转换是有风险的:可能会溢出或损失精度						
②boolean不参与	
③当需要把某个存储范围小的变量强制提升为存储范围大的类型时,也可以使用强制类型转换

三、示例

class Test03_TypeChange{
   public static void main(String[] args){
      /*
      从左边看d1是double类型
      从右边看10是int类型
      int类型的值,赋值给了double类型的变量,那么它会自动升级为double
      */
      double d1 = 10;
      System.out.println("d1 = " + d1);
        /*
        从左边看i1是int类型
        从右边看10.0是double类型
        double类型的值,赋值给int类型的变量,如果直接赋值会报错:错误: 不兼容的类型: 从double转换到int可能会有损失
      */
        //int i1 = 10.3;
        int i1 = (int)10.3;
        System.out.println("i1 = " + i1);
        byte b1 = 127;
        byte b2 = 2;
        //byte b3 = b1 + b2;//报错:不兼容的类型: 从int转换到byte可能会有损失,因为byte+byte就自动升级为int
        byte b3 = (byte)(b1 + b2);
        System.out.println("b3 = " + b3);

        short s1 = 1;
        short s2 = 2;
        //short s3 = s1 + s2;//short+short会自动升级为int
        short s3 = (short)(s1 + s2);
        System.out.println("s3 = " + s3);

        char c1 = '0';//'0'的编码值是48
        char c2 = '1';//'1'的编码值是49
        //char c3 = c1 + c2;//char+char会自动升级为int
        char c3 = (char)(c1 + c2);
        System.out.println("c3 = " + c3);//'a'

        boolean flag = true;
        //int num = (int)flag;//不兼容的类型: boolean无法转换为int

        int x = 1;
        int y = 2;
        System.out.println("x / y = " + x/y);//整数/整数,结果还是整数,只保留整数部分
        System.out.println("x / y = " + (double)x/y);//把x的int类型先强制升级为double类型
    }
 }

四、数据类型转换的特例:字符串类型

所有类型与字符串“+”拼接,结果都是字符串

五、示例

class Test04_TypeChange{
   public static void main(String[] args){
        /*
        c1 + c2,按照求和运算,char + char结果是int
        ""代表空字符串,
        当int的97与""进行 “+”拼接,结果还是97的字符串
        */
      char c1 = '0';
      char c2 = '1';
      System.out.println(c1 + c2 + "");//97
        /*
        "" + c1,按照“拼接”运算,字符串 + char,结果是字符串,结果是"0"
        "0" + c2,按照“拼接”运算,字符串 + char,结果是字符串,结果是"01"
        */
      System.out.println("" + c1 + c2 );//01

        /*
        c1 + "",按照“拼接”运算,char + 字符串 ,结果是字符串,结果是"0"
        "0" + c2,按照“拼接”运算,字符串 + char,结果是字符串,结果是"01"
        */
        System.out.println(c1 + "" + c2 );//01
   }
}