Java学习笔记程序员

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

2016-11-07  本文已影响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...♨

上一篇下一篇

猜你喜欢

热点阅读