1.类型转换
- 由于Java是强类型语言,所以在进行有些运算时,需要用到类型转换。
- 运算时,不同类型的数据从低到高先转化为同一类型,在进行运算。
- byte→short→int→long→float→double
- 强制类型转换:(类型)变量名
高类型→低类型
int i=128; byte b=(byte)i;
- 自动类型转换
低类型→高类型
int i=128; double d=i;
2.注意
- 不能对布尔值进行转换
boolean flag=(boolean)23;//错误写法
- 不能把对象类型转换成无关的对象
- 在高→低,强制类型转换
- 转换时会出现内存溢出或精度问题
内存溢出
int i=128; byte b=(byte)i;//byte范围在-128~127内,i=128,导致内存溢出
输出
128
-128
精度问题
System.out.println((int)23.3); System.out.println((int)23.33f);
输出:
23
23
3.字符类型(char)
- char类型本质上也是数字类型
char c='a';
int d=c+1;
System.out.println(d);//输出98
System.out.println((char)d);//输出b
a(97)的下一个字母就是b(98)
4.扩展
- 操作比较大的时候,注意溢出问题
- JDK7新特性,数字之间可以用下划线分割
int money=10_0000_0000;
int year=20;
int total1=money*years;//-1474836480,这里计算就已经溢出了
long total2=money*years;//money*years的结果是int,已经计算溢出了,再赋值给long已经没用用了
long total3=money*((long)years);//先把一个数转换为long,根据类型转换的原则,money*((long)years)计算时,money会先转换为long,然后在计算