美文网首页
JavaSE之隐式转换、强制转换

JavaSE之隐式转换、强制转换

作者: 金石_832e | 来源:发表于2019-02-27 18:34 被阅读0次

    课前小例


    package com.zpwd.chapter1_0225;
    
    public class TypeChange {
    public static void main(String[] args) {
        // 类型转换
        // 1.自动类型转换:两种类型彼此兼容,目标的取值范围大于原型
        byte num1 = 12;
        short num2 = num1;
        int num3 = num2;
        long num4 = num3;
    
        // 2.强制类型转换:(1)两种类型彼此兼容(不能跨大类型),但目标类型取值范围小于原类型(强转有风险,用时需谨慎)
        long a1 = 128;
        int a2 = (int) a1;
        short a3 = (short) a2;
        byte a4 = (byte) a3;
        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);
        System.out.println(a4);// 溢出、损失精度:-128
    
        // 运算的兼容:向范围大的方向兼容:byte ,char,shory,int运算时,兼容方向是int。
        long l1 = 10;
        int l2 = 20;
        // int l3 = l1 + l2; //该种写法报错
        int l3 = (int) (l1 + l2);
    
        byte num11 = 9;
        short num12 = 10;
        // short num13 = num11+num12;//报错,因为num11+num12得到的类型是int
        short num13 =(short) (num11+num12);
        
        //当double类型的变量强转成int时,默认为取整
        //面试题:short s1= 99;s1 = s1+2;与s1+=2 有什么区别?
        // s1+2 得到的是int类型,给s1重新赋值时,必须强转成int
        // 而s1+=2 不需要强转
        }
    }
    

    转换类型:隐式转换(自动类型转换)、强制类型转换

    隐式转换:两种类型彼此兼容,范围小的类型转成范围大的类型。

    byte 可以自动转换成 short 、int 、long
    short 可以自动转换成 int 、long
    int 可以自动转换成 long

    强制类型转换:两种类型彼此不兼容(描述并不准确),范围大的类型转成范围小的类型。

    long 强制转换成 int 、short 、byte

    注意:

    • 强制转换成什么类型,就要在前面加(小范围类型),例如(int)、(short)、(byte)
    • double类型的变量强制转换成int类型的变量时,默认为取整。
    • 运算兼容类型:byte ,char,shory,int,他们在做运算时,全部向int类型兼容。例如:btye类型变量+char类型变量 = int类型变量。

    面试题

    short s1= 99;
    s1 = s1+2;
    该种写法是否正确,正确的写法与s1+=2有何区别?

    • 该种写法不正确,s1 是short类型,因为byte ,char,shory,int他们属于兼容类型,short类型变量+int(默认)2 = int,而int变量赋值给short时,因为范围变小,需要强制转换。
      正确写法:
      short s1= 99;
      s1 = (short)(s1+2);
      而s1+=2 是不需要强制转换的。

    相关文章

      网友评论

          本文标题:JavaSE之隐式转换、强制转换

          本文链接:https://www.haomeiwen.com/subject/hnafuqtx.html