低----------------------------------------------------->高
byte,short,char–>int–>long–>float–>double
强制转换
格式: (类型)变量名 (高----低)
int i=128;
byte b=(byte)i;//强制类型转换
System.out.println(i);
System.out.println(b);//内存溢出
输出结果:
这里b的值为什么出现-128呢?i的值明明是128,这我们需要的了解一下Byte ,Byte为byte的类,我们到Byte源码去看一下
它的的取值范围是-128-127;所以内存溢出了。
自动转换
低----高
int i1=128;
double b1=i;//自动转换
System.out.println(i1);
System.out.println(b1);
输出结果:
类型转换的注意点
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换为低容量的时候进行强制转换
4.转换的时候可能存在内存溢出,或者精度问题
举例:
System.out.println((int)23.7);
System.out.println((int)-47.89f);
输出结果:
操作比较大的数的时候,注意溢出问题
public class Demo03 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//JDK新特性 数字之间可以用下划线分割
int money=10_0000_0000;
int year=20;
int total=money*year;//-1474836480 计算的时候溢出了
long total2=money*year;//-1474836480 默认是int 转换之前已经存在问题了
long total3=money*((long)year);
System.out.println(total);
System.out.println(total2);
System.out.println(total3);
}
}
输出结果: