变量的转换
类型转换
精度丢失
加减乘除运算
1. 类型转换 溢出 精度丢失
高精度向低精度转换 =》溢出
低精度向高精度转换 隐式转换
2. 数值之间的自动转换
基本数据类型的加减乘除 的结果,会自动向最大类型转换
精度丢失
加减乘除运算
1. 类型转换 溢出 精度丢失
高精度向低精度转换 =》溢出
低精度向高精度转换 隐式转换
float b=1.0f 是可以的也是属于强转的一种
long l=1024L*1024*1024*4; int j=(int)l;//会产生溢出 System.out.println(j);//结果为:0
double pi=3.141592653589793; float f=(float)pi;//会造成精度的损失 System.out.println(f);//结果为:3.1415927
2. 数值之间的自动转换
基本数据类型的加减乘除 的结果,会自动向最大类型转换
long distance=10000*365*24*60*60*299792458L;
上述代码中,有int类型数据和long类型数据,由于有long型的直接量299792458L参与,整个表达式的结果为long
double change=800-599.0;
上述代码中,由于有double型的直接量599.0参与,整个表达式的结果为double。
double persent1=80/100;
上述代码中,结果为0.0.右边是int型数据,语法运算后的结果也为int类型,结果为0,再赋值给double型,将0转化为0.0.请对比下面的代码:
double persent2=80.0/100;
上述代码中,结果为0.8,右边表达式有double型直接量参与,运算结果为double型。
步骤三:byte、char、short转换为int的问题
byte、char、short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:
1)int直接量可以直接赋值给byte、char和short,只要不超过其表示范围。
2)byte、char、short三种类型参与运算时,先一律转换为int类型再进行运算。请看如下示例代码:
byte b1=28; byte b2=20; byte b3=b1+b2;
上述代码在第三行会出现编译错误,原因是b1+b2的结果为int类型。改变上述代码如下:
byte b1=28; byte b2=20; int b3=b1+b2;
查看上述代码,会发现不会再出现编译错误。char类型、short类型和byte类型是相似的。