A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

数据类型转换在使用的过程中,常见的问题有以下几点:
1) 强制转换时的精度丧失和溢出。
2) 数值运算时的自动转换。
3)byte、char、short转换为int的问题。
下面分别做详细分析:
(1):强制转换时的精度丧失和溢出
基本类型之间的相互转换,需要注意的是,强制转换时可能会造成精度的丧失和溢出,请看如下代码:
long l = 1024L *1024 * 1024 * 4;
int j = (int) l; //会产生溢出
System.out.println(j);// 结果为:0
上述代码输出的结果为0,是因为在将long类型变量l转换为int类型变量j的时候产生了溢出。
另外,请看如下精度丧失的例子:
double pi =3.141592653589793;
float f = (float)pi; // 会造出精度的损失
System.out.println(f);// 结果为:3.1415927
上述代码的输出结果为3.1415927,值保留了7位小数,这是因为将double类型的变量pi转换为float类型的变量f时造成了精度的损失。
(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型。
(3):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类型是相似的。

1 个回复

倒序浏览
基础班的总结,挺好的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马