一.隐式转换
隐式转换也叫自动类型转换,指的是不需要调用函数,JVM自动将类型转换的一种方式。因为这种类型转换经常使用,Java语言在设计时,为了减轻开发人员的负担,都交给JVM来自动处理。
转换规则: 从存储范围小的类型到存储范围大的类型。
byte —> short,char —> int —> long—> float —> double
栗子: byte b = 2;
short s = b;
首先JVM会将b的值转换为short类型,再将值赋值给s
二.显示转换
显示转换也叫强制类型转换,指的是需要手动去处理才能完成的类型转换。强制类型转换会精度损失。
我今天在项目中就遇到了精度损失的bug,就是计算的时候使用的是Double.parseDouble(String s), 计算的值本来是四舍五入保留两位小数,是3.365应该是3.37,但是这个时候计算出现了精度损失,变成了3.364999...,这样计算结果就会不正确, 可以使用BigDecimal解决,它里边提供了一些计算的方法
转换规则: 从存储范围大的类型到存储范围小的类型
double —> float —> long —> int —> short(char) —> byte
栗子:double d = 1.1;
int i = (int)d;
需要注意的是小数强制转换为整数,采用的是"去1法",也就是舍弃小数点后面所有数字,转换出的结果是1。