数据类型转换在使用的过程中,常见的问题有以下几点: 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类型是相似的。
|