一、自动类型转换(隐式类型转换)
整型、实型(常量)、字符型数据可以混合运算。不同类型的数据先转化为同类型再进行运算
自动转换按从低级到高级顺序:
char
↓
Byte→short→int→long—›float→double
自动转换有以下规律:
小的类型自动转化为大的类型
整数类型可以自动转化为浮点类型,可能会产生舍入误差
1.自动类型转换(隐式转换)
小的类型自动转化为大的类型
byte A = 70;
int B = A + 30;
System.out.println(B);
byte小类型转int大类型
1.1自动类型转换
byte a = 0;
int b = a;
long c = a;
float d = a;
double e = a;
System.out.println(“b=”+b);
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("e="+e);
从小的类型转为高的类型,byte转int,long,float,double
得出结果:0 0 0.0 0.0
1.2整数类型可以自动转化为浮点类型,可能会产生舍入误差
float A = 2 + 10f;
float B = A - 11.9f;
System.out.println(B);
结果: 0.10000038
精准度和准确度是有差距的,float精准度的准确姓流失
二、强制类型转换(显式类型转换)
1.int是要强制类型转换后的数据类型
强制转换类型,在要强制转换类型的前面加上括号,然后再括号里面加上你要转换的类型。
有些数据经过转换运算后,精度就丢失了,上图的例子就可以明确看出
由上面得出,int55.55强制转换,由于55.55转成了55,同样的22.22转成22,得出x的结果是77,(double)x这个double类型的强制转换,经过强制转换,x的值变为55.0,而(double)1.1也强制转换成 double类型,所以变成1.0,最后的出来的值为79.199999999999999
因为类型转换导致精度损失,使55.55变成55。。。1.1变成 1
运行结果得出来的值分别为:
X=77
Y=79.199999999999999
2.浮点数转换整数是通过舍弃小数得到的,而不是四舍五入
int A= (int) 11.7;
int B = (int) -21.6;
System.out.println(A);
System.out.println(B);
要把11.7转成int整型,在转换值前(也就是11.7前)加括号,把要转换的类型写在括号里,进行强制转换,转换后丢失精度
结果:
A=11
B=-21
1.1容量大类型转容量小类型
在把容量大的类型转换为容量小的类型时必须使用强制类型转换
int A=120;
byte B=(byte) A;
System.out.println(B);