测试的代码:
public class CastTests { public static void main(String[] args) { byte b = 1; short s = 1; int i = 1; float f = 1f; //自动转换。精度低的类型可以自动转为精度高的类型。 //自动转换方向:byte-->short-->int-->long-->float-->double s = b;//byte-->short f = i;//int-->float //需要强转。精度低的转为精度高的类型会丢失精度。 b = (byte) s;//short-->byte s = (short) i;//int-->short //自动转换。"+="操作会自动执行强制转换。 b += s;//相当于"b = (byte)b + s"。 b -= 1;//相当于"b = (byte)b - 1"。 s *= f;//相当于"s = (short)b * f"。 //经过算数运算符操作,右边的类型只能是int,long,float,double。 s = (short) (s + b);//(s + b)类型为int b = (byte) (b / b);//(b / b)类型为int i = (int) (i * f);//(i * f)类型为float f = i + f;//float-->float f = i * b;//int-->float i = s / b;//int-->int }}
注意几点:
1、自动类型转换是低精度往高精度方向,反之都需要强制转换,会损失精度。
2、"+=, -=, *=, /="四个操作会执行强制类型转换,有时会丢失精度。
3、算数运算符操作之后的数据精度至少是int。也就是说,比如byte与byte类型相加减,结果类型是int或者更高精度(long,float,double)。