类型转换
数据类型转换必须满足如下规则:
不能对boolean类型进行类型转换。
不能把对象类型转换成不相关类的对象。
在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
转换过程中可能导致溢出或损失精度,例如:
int i =128;
byte b = (byte)i;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢
出。
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
(int)-45.89f == -45
自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
转换从低级到高级(根据容量来看)
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型 在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
public static void main(String[] args) {
double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b
}
常见错误和问题
1.操作比较大的数时,要留意是否溢出,尤其是整数操作时;
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//IDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000; //10亿
int years = 20;
int total = money*years; //-1474836480,计算的时候溢出了
long total2 = money*years; //返回的仍然是负数。默认是int,因此结果会转成 int值,再转成long。但是已经发生了数据丢失
long total3 = money*((long)years); //先将一个因子变成long,整个表达式发 生提升。全部用long来计算。
System.out.println(total3);
}
- L和l 的问题:不要命名名字为l的变量 ,long类型使用大写L不要用小写。
int L = 2;
long a = 23451l;
System.out.println(L+1); //3
System.out.println(a); //23451