Java语言的数据类型定义很严谨,不允许数据类型之间随意转换(Conversion),也就是说原本把变量声明为int数据类型,如果给它赋予char类型的数据,在编译时就会发生错误。数据转换的方式有两种:一种是“由小变大”;另一种是“由大变小”。
如果“目的变量”和“源变量或数据”之间的类型不相同,在转换时符合两个条件,转换后的源变量或数据类型就不会影响数值的精度。“由小变大”的转换机制会“自动转换”,而不会损失数据的精确度。下面列出转换的机制:
double(双精度浮点数)> float(浮点数)> long(长整数)> int(整数)> char(字符)> short(短整数)> byte(字节)
·转换类型之间必须兼容。例如short(短整数)可以和int(整数)互相转换,但不可以和byte(字节)互相转换。
·“目的变量”的数据类型必须大于“源变量或数据”的数据类型,也就是以数值范围较大的为主。例如short(短整数)可以和int(整数)互相转换;int(整数)可以和long(长整数)互相转换。
“由大变小”的转换机制需“指定转换”,当“目的变量”的数据类型小于“源变量或数据”的数据类型时,使用的转换语法如下:
(指定类型) 数据 | 变量; // 注意括号不可省略
所谓“指定类型”是指目的类型。“数据|变量”指的是源变量或数据。数值大范围的数据类型转换成数值小范围的数据类型时,部分数据可能会被截去,即损失了精度。例如,声明两个整数变量分别为X和Y,并各赋予了初值,X=19、Y=4。如果进行除法运算“X/Y”,那么运算的结果(Z)为4,但是如果希望计算结果的精确度能够到小数点后面,结果的类型就不能使用“整数int”,正确的做法应该是采用“强制类型转换”的方式来重新定义参与计算的变量值或数值:
Z=(float)X / (float)Y; // 先将X和Y原来声明的整数类型强制转变成浮点数类型
【范例程序:CH02_08】
01 //程序:CH02_08.java,数据类型的转换 02 public class CH02_08 { 03 public static void main(String[ ] args) { 04 int i=10; 05 byte b=(byte) i; 06 byte b1=65; 07 char c=(char)b1; 08 System.out.println("i="+i); 09 System.out.println("b="+b); 10 System.out.println("b1="+b1); 11 System.out.println("c="+c); 12 } 13 }
【程序的执行结果】
程序的执行结果可参考图2-11。
图2-11