数据类型转换
//数据类型转换 (低)byte,short,char--→int--→long--→float,double(高)
强制转换类型
- 规则:数据从高转换低,出现内存位不足、内存溢出的情况
- 举例:
int i = 128;
byte b = (byte) i;
// = (类型) 转换变量的名
System.out.println(i);//128
System.out.println(b);//-128(溢出)
自动转换类型
- 数据从低转换到高,内存足够,可自动转换,直接赋值即可
- 举例:
int i1 = 128;
double b1 = i1;
System.out.println(i1);//128
System.out.println(b1); //128.0
//也可用 System.out.println((double)b1);减少冗余,直接转换类型,其中(double)b1被称为内联变量
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象(变量)类型转换为不相干的类型
3.在把高容量转换到低容量时,强制转换
4.转换的时候可能存在内存溢出或者精度问题!
*/
溢出问题
运算中操作太大时要注意溢出问题(未使用自动转换)
int money = 10_0000_0000;//JDK新特性,数字之间可以用下滑线分割以便于阅读
int years =20;
int total = money*years;
//System.out.println(total);//-1474836480,计算的结果溢出了
System.out.println((long)total);//上一个过程已经默认为int,即在转换之前就已经溢出了,此处再次转换为long是以溢出的结果-1474836480为对象
long total2 =money*((long)years);//先把其中一个数据转换为long(任意一个数据)
System.out.println(total2);//200_0000_0000( 结果正确)
//使用了自动转换,转向高容量
精度问题
System.out.println((int)23.7);//23
//23.7为double类型(浮点数),此处强制转换为整数,则出现精度问题,小数点及其后数字被直接去除,非四舍五入!
System.out.println((int)-45.89f);//-45
//-45.89f为float类型,同上。
关于char的转换
char c = 'a';//a=97 b=98
int d = c+1;
System.out.println(d);
System.out.println((char)d);//b