美文网首页Java学习笔记程序员
1、Java中数据类型转换与内存溢出问题

1、Java中数据类型转换与内存溢出问题

作者: 前端好有趣 | 来源:发表于2016-11-07 10:37 被阅读260次

    默认转换(从小到大的转换):

    如果有byte、short、char类型的数据参与运算的话,那么他们首先会转换为int类型。如果需要,然后以int-long-float-double这个顺序转换,byte、short、char相互之间不转换,他们参与运算首先转换为int类型

    强制转换(从大到小的转换):

    byte a = 3;

    int b = 4;

    byte c = ( byte ) ( a + b )

    不要随意使用强制转换,从高精度到低精度,隐含了精度损失问题

    注意:

    byte b1 = 3, b2 = 4, b;

    b = b1 + b2; //这个是错误的,因为两个byte数据参与运算,首先他们要转换成int类型,再作运算。

    b = 3 + 4; //这个是正确的,先把结果计算出来,然后看是否在byte的范围内,如果在,就不报错。

    内存溢出图解:

    为何

    (byte)128=-128

    (byte)129=-127

    很简单,因为byte支持的范围为-128~127,所以只要想象这么一个循环图,以此类推就好了。

    内存溢出图解

    char类型的数据做运算,一定要记住这三个关键ASCII码值:

    'a' 97

    'A' 65

    '0' 8

        char a = '0', b = '1' , c;
        c = a + b;  //错误,a和b为char类型,相加前要先转换为
                    // int类型,a+b的结果为int类型,但c为char类型
        c = (char) (a+b);
        int d = a + b;
        System.out.println(a);  //值为'0'
        System.out.println(b);  //值为'1'
        System.out.println(c);  //值为'a'
        System.out.println(d);  //值为97
    

    int-long-float-double顺序中的小“问题”:

    他们分别所占字节数:
    int 4、long 8、float 4、double 8
    细心的小朋友就会发现,明明float所占的字节数比long小,为何float还排在long的后面,long表示的精度范围不应该比float大吗?

    其实:他俩的底层储存结构不同,所表示的精度范围也不能以同一种标准来评判,float的储存方式详见如下链接

    他俩的数据范围比较:

    long:-2^63 ~ 2^63-1

    float:-3.403×10^38 ~ 3.403×10^38

    3.4×10^38 > 2×10^38 > 2×8^38 = 2×2338 = 2×2^114 > 2^63-1

    float所表示的数据范围远远大于long

    .
    .

    ♨To Be Continue...♨

    相关文章

      网友评论

        本文标题:1、Java中数据类型转换与内存溢出问题

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