由于java是强类型语言,所以要进行某些计算的时候,需要用到类型转换
低--------------------------------------------------------------->高
byte,short,char---->int---->long---->float---->double
计算中不同类型的数据要先转换为同一类,然后进行计算
强制转换
从高内存转换到低内存时要强制转换:(类型)变量名
自动转换
从低内存转换到好内存是可自动转换
int i=12;
byte b=(byte) i//强制转换
int a=12;
double c=a//自动转换
注意!!!
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 把高容量转换到低容量时,要强制转换
- 转换时可能存在内存溢出或精度问题
int i=128;
byte b=(byte) i;
System.out.println(i);
System.out.println(b);
结果分别是128、-128,因为byte最多只能到127,内存溢出了
System.out.println((int) 23.7);
System.out.println((int) -45.89f);
结果分别是23、-45,这就是精度问题
char c='a';
int d=c+1;
System.out.println(d);
System.out.println((char) d);
结果分别是98、b
操作比较大的数的时候,注意溢出问题
(JDK7新特性,数字之间可用下划线分割,下划线并不会被输出)
int money=10_0000_0000;
int yeat=20;
int total=money*yeat;
System.out.println(total);
结果是-1474836480,出现了溢出问题
错误操作:
int money=10_0000_0000;
int yeat=20;
long total=money*yeat;
System.out.println(total);
结果还是-1474836480,因为是先用int计算完之后再把结果转换为long
正确的操作:
int money1=10_0000_0000;
int year1=20;
long total1=money1*((long)year1);//先把一个数转换为long
System.out.println(total1);