类型转换
-
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
-
转换从低级到高级。
低 ------------------------------------> 高 byte,short,char—> int —> long—> float —> double -
运算中,不同类型的数据先转化为同一类型,然后进行计算
强制类型转换(从高级到底级)
语法((类型)变量名)
int i = 128;
//byte b = i; 在Java编译器中会直接报错
byte b = (byte)i;
//输出:128
System.out.println(i);
//输出:-128;因为内存溢出
System.out.println(b);
//输出:12;因为精度损失
System.out.println((int)12.3);
//输出:-3;因为精度损失
System.out.println((int)-3.14);
自动类型转换(从低级到高级)
int i = 128;
double b = i;
//输出:128
System.out.println(i);
//输出:128.0
System.out.println(b);
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度
- 因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分隔
int money = 10_0000_0000;//10亿
//输出结果:1000000000
System.out.println(money);
int total = 20 * money;
long total2 = 20 * money;
//输出:-1474836480;因为计算的时候溢出了
System.out.println(total);
/*
输出:-1474836480;虽然total2的类型是long型,不会溢出
但是:计算的结果是根据,计算值是根据计算之前的类型
20和money是int型,所以计算结果也是int型
*/
System.out.println(total2);
long total3 = 20 * ((long)money);
/*
输出:20000000000;
先将money的类型转换为long型
然后计算结果,也是选择以类型级别高的类型为准
*/
System.out.println(total3);