类型转化
由于java是强类型语言,所以要进行游有些运算时,需用到类型转换。
1.优先级
低------------------------------------------------------------------>高
byte,short,char--> int--> long-->float-->double
小数优先级大于整数,所以float与double在高。1.内存溢出
int a1 = 128; byte a2 = (byte)a1;//内存溢出 System.out.println(a1);//内存溢出 输出-128---问题点1
问题点1:计算机以二进制进行运算,127二进制为0111 1111,超过时(127+1的二进制运算0111 1111+0000 0001),会变成-128二进制1000 0000,所以输出为-128.
2.强制类型转换
int a1 = 128; byte a2 = (byte)a1;//强制转换
由低到高转换,需要强制转换,(类型)变量名,而且要注意内存溢出。
(类型)变量名 高--->低
3.自动类型转换
int a1 = 128; double a2 = a1;//强制转换
由高到底,自动转换。
4.转换的注意事项
-
不能对布尔值进行转换
-
不能把对象类转换为不相干的类型
-
在高容量转换低容量时,强制转换,低到高不用动。
-
转换时可能会存在内存溢出或精度问题(小数)。
System.out.println((int)26.9);//26 System.out.println((int)26.9f);//26
5.常见问题
int money = 10_0000_0000;//jdk7新特性,数字间可以加下划线,不影响使用。 int years = 20; int total1 = money*years;//超出范围 报错 应使用long。 long total2 = money*years;//计算机先对money与years经行运算,但是他们还是int类型,直接定义变量long没用。 long total3 = money*((long)years); //强转years变成long类型,正确运算。 System.out.println(total1); //-1474836480 System.out.println(total2); //-1474836480 System.out.println(total3); //20000000000
在有些时候大写L与小写l,小写容易被看成1,可以大写时尽量大写。