数据类型转换
-
数字类型的优先级关系
byte,short,char->int->long->float->double -
我们在给定义后的变量赋值时 一定要避免超出他们的临界范围,避免内存溢出。
-
高→低:强制转换;
低→高:自动转换;
例如:
int a=122;
byte b=a;//这样会报错,因为a与b的数字类型是不同的
int a=122;
byte b=(byte)a;//这样子是正确的
byte b=122;
int a=b;//这样子是可以自动转换的,因为int的优先级大于byte,不需要强制类型转换
- jdk7新特性,数字直接可以用下划线分割,但是下划线并不会输出该下划线。
- 一个例子:
int a=1000000000;//1000000_0_00=1000000000
int b=20;
long c=a*b;
System.out.println(c);
//这样输出的结果并不是两百亿,
//因为a*b默认是int类型的两百亿会有数值溢出。
long c=a*(long)b;
//这样就可以了,因为b被强制转换成long类型的,
//这样即使a是int类型的,最后计算的结果也会自动转换成long类型的,不会出现数值溢出情况。
但是不能这样子改
long c=(long)(a*b);
因为第二个括号运算后就已经是数值溢出的int类型的数值了,只不过再把它转换成long类型的数值,所以结果仍然不是两百亿。