美文网首页
Java面试 - 整型之间的转换

Java面试 - 整型之间的转换

作者: 程序猿蛋蛋哥 | 来源:发表于2021-02-10 23:18 被阅读0次
    程序员的快乐.jpeg

    目录

    • 整型之间的转换总结:
    • 整型的值范围
    • 整型的隐式转换
    • 整型之间的转换
        1. char类型转换为byte、short时,必须使用显式类型转换
        1. 当byte,char或者short类型(或为三者的混合)参与运算时,结果为int类型,而并非与较高的类型相同
        1. byte转char比较特殊,先将byte扩展到int,然后再收缩到char,即扩展收缩转换

    整型之间的转换总结:

    1. 如果变量的类型是byte、short或char类型,当对其赋予编译时期的常量,而该常量又没有超过变量的取值范围时,编译器就可以进行隐式的收缩转换。这种隐式的收缩转换是安全的,因为该收缩转换只适用于变量的赋值,而不适用于方法调用语句,即不适用于方法调用时的参数传递。

    2. 注意char类型,是一个无符号类型。因此,char与short,char与byte之间的转换都必须显式地使用类型转换。

    3. 从byte到char的转换为扩展收缩转换,该转换比较特殊,即先将byte扩展转换到int,然后再收缩转换到char。

    4. 在整型数据间的扩展转换中,如果操作数是char类型(无符号类型),则进行无符号扩展,扩展位为0;如果操作数是byte、short或int(有符号类型),则进行有符号扩展,扩展位为该变量的符号位。

    5. 整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。


    整型的值范围

    byte:8位(一个字节8位),值范围:-2⁷~ 2⁷, 即 -128 ~ 127

    char:16位,无符号类型,能表示的数值范围为:0 ~ (2¹⁶-1) ,即 0 ~ 65535

    // char类型的最小值,Unicode的'\u0000'表示的是空字符,十进制数字表示的是0
    public static final char MIN_VALUE = '\u0000';
    // char类型的最大值,Unicode的'\uFFFF'转换为十进制数字时,直接进行无符号位扩展到32位,即表示的数值为65535
    public static final char MAX_VALUE = '\uFFFF';
    

    short:16位,值范围:-2¹⁵ ~ (2¹⁵-1),即 -32768 ~ 32767

    int:32位,值范围:-2³¹ ~ (2³¹-1),即 -2147483648 ~ 2147483647

    long:64位,值范围:-2⁶³ ~ (2⁶³-1),即 -9223372036854775808 ~ 9223372036854775807


    整型的隐式转换

    编译时的整型字面常量(int类型),如果将其赋值给比 int 类型低的变量类型(byte、short或char),而整型字面常量的值没有超过该变量类型的取值范围,那么编译器就可以做隐式类型转换。

    byte b = 1; // 隐式类型转换,byte值范围为:-128 ~ 127,1在此范围内 
    char c = 1; // 隐式类型转换,char能表示的数值范围为:0 ~ 65535,1在此范围内
    short s = 1; // 隐式类型转换,short值范围为:-32768 ~ 32767,1在此范围内
    
    编译错误
    byte b1 = 128; // 编译错误,128超过了byte值范围,产生编译错误
    
    int i = 1;
    以下产生编译错误,i不是整型字面常量,不能做隐式转换,必须显式强转
    byte b2 = i; // 编译错误,必须显式强转:byte b2 = (byte) i;
    char c2 = i; // 编译错误,必须显式强转:char c2 = (char) i;
    short s2 = i; // 编译错误,必须显式强转:short s2 = (short) i;
    

    隐式转换的条件总结:

    • 整型字面常量
    • 整型字面常量的值没有超过要转类型的取值范围
    • 只适用对变量赋值,不适用于方法调用语句

    整型之间的转换

    1. char类型转换为byte、short时,必须使用显式类型转换

    char类型是无符号类型,值范围是:0 ~ 65535,与byte(-128 ~ 127),short(-32768 ~ 32767)类型不存在子集关系,因此char类型与其他两种类型之间的转换必须使用显式类型转换。

    char c = 'a';
    byte b = (byte) c;
    short s = (short) c;
    

    2. 当byte,char或者short类型(或为三者的混合)参与运算时,结果为int类型,而并非与较高的类型相同

    byte b = 100;
    char c = 50;
    short s = 200;
    int t1 = b + c; // byte类型 + char类型,结果为int类型
    int t2 = b + s; // byte类型 + short类型,结果为int类型
    int t3 = c + s; // char类型 + short类型,结果为int类型
    

    3. byte转char比较特殊,先将byte扩展到int,然后再收缩到char,即扩展收缩转换

    <1> 扩展转换:

    在整型数据间的扩展转换中,如果操作数是char类型(无符号类型),则进行无符号扩展,扩展位为0
    如果操作数是byte、short或int(有符号类型),则进行有符号扩展,扩展位为该变量的符号位。

    <2> 收缩转换:

    整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。

    相关文章

      网友评论

          本文标题:Java面试 - 整型之间的转换

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