数据类型转换及注意事项
/*
因为java是强类型语言,所以在运算的时候要先进行类型转换
低容量------------------------------------→高容量
byte--short--char--→int--→long--→float--→double
运算中,不同类型先转化同类型再进行计算
*/
//自动类型转换,低到高(低赋值给高)
//强制类型转换,高到低(高赋值给低)
public class demo4 {
public static void main(String[] args) {
//类型转换举例
int a1 = 133;
byte a2 = (byte)a1; //高到低,强制转换,存在溢出
/*int类型的a1强制转换为byte类型,因为int的容量大于bte,高到低强转。
但是133超出bte的容量范围,因此存在溢出的问题。打印结果为-123,是有问题的。因此要考虑溢出的问题*/
System.out.println(a2);
double a3 = a1; //int--→double,低到高,自动转换,不需要加任何操作
System.out.println(a3); //打印输出133.0
/*注意点:
1、不能对boolean值进行转换;
2、不能把对象类型转换为不相干类型;
3、在把高容量转换到低容量的时候强制转换;
4、转换的时候可能存在溢出(上面的int强制转换为byte类型的例子),或者精度问题
*/
System.out.println("=============精度问题=================");
System.out.println((int)125.34); //125 double或者float强制转换为int时,存在精度丢失的问题。
System.out.println((int)111.2f); //111 精度丢失
System.out.println("======================================");
char b1 = 'a';
int b2 = b1 + 1;
System.out.println(b2); // 打印输出为98,因为字符a对应编码表数字97,所以b2=98
System.out.println((char)b2); //高到低,强制转换。打印为b,因为字符a+1为b
System.out.println("===================操作比较大的数时注意溢出===================");
int money = 10_0000_0000; //jak7新特性,数字间可用下划线分割
int years = 20;
int total1 = money*years;
System.out.println(total1); //-1474836480 int的最大容量21亿,超出容量,所以出错
long total2 = money*years;
System.out.println(total2); // -1474836480 total2把total2转换为long型,没超出容量为什么还是不对呢,
// 这是因为money和years都是int,在total2为long型之前,就已经溢出。
//正确做法,将money或者years先提前转换为long,此时不会存在溢出的问题,如下:
long total3 = money*(long)years;
System.out.println(total3); //打印输出20000000000
}
}