西乡街道执法队队长:2.5 数据类型的转换

来源:百度文库 编辑:偶看新闻 时间:2024/04/24 17:38:45

2.5 数据类型的转换
Java中变量的数据类型在变量定义时就已被确定,因此不能随意地转换成其他的数据类型,但Java允许它的用户有限度地进行数据类型转换处理。转换的方式可分为“自动类型转换”和“强制类型转换”两种。
整型、实型和字符型数据需要进行混合运算时,首先需要把不同类型的数据转化为同一类型,然后才能进行运算。转换时,系统将按照数据类型的表示范围由小到大的转换原则自动进行。数据类型的表示范围由小到大的顺序依次为:小→大
byte→short→char→int→long→float→double
例2.5.1 自动类型转换示例。

本程序运行结果为:

现在要请大家注意的是上述程序的第6行与第7行的两句赋值语句:long l=567L和float f=1.89f,在这两句语句的最后各加了一个数据类型符L和f,为什么要加这两个符号呢?这是为了“告诉”编译器将该常数按程序员指定的数据类型(该两处分别为长整形与单精度型)进行处理;因为编译系统在处理类似“576”和“1.89”这样的“直接常数”时,有其默认的处理规则:对于整数一律按int类型处理;对于浮点数一律按double类型处理。对于第6行的语句,若是后面不加L,编译器将576按int类型处理,由于576属于int类型的处理范围,因而处理完毕后赋值给长整形变量l,int类型的数据到long类型的数据,系统可以进行自动转换,因此不会出错;但第7行的语句若是不加f的话,编译器就会将数据1.89按double类型处理,double类型的数据要赋值给float类型的变量,系统不能进行自动转换,因此就会出现编译错误。
在程序设计过程中,如果在一个程序里使用了“直接常量”,编译器可以准确地知道要生成什么样的类型,一旦发生类型不匹配的情况,必须对编译器加以适当的“指导”,用与直接常量搭配某些字符来增加一些信息,以保证编译正常通过,大家在编程序时,也应注意这一点。表示范围大的数据类型要转换成表示范围小的数据类型,需要用到强制类型转换,强制类型转换的语法形式为:
(type)<变量名>
例如:
int m=3;
byte b=(byte)m; //把int型变量m强制转换为byte型
这种转换方式可能会导致溢出或精度的下降,因此很少使用。
有时当两个整数相除时,系统会把这种运算归为整数类型的运算,因而会自动截去小数部分,使运算结果保持为整数。这显然不是预期的结果,因此,想要得到运算结果为实型数,就必须将两个整数中的一个(或两个)强制转换为实型,此时下面的三种写法均可行:
1)(float)a/b:将整数a强制转换成实型数,再与整数b相除。
2)a/(float)b:将整数b强制转换成实型数,再被整数a除。
3)(float)a/(float)b:将整数a与b同时强制转换成实型数。
只要在变量前面加上欲转换的类型,运行时系统就会自动将这一行语句里的变量进行类型转换处理,但不会影响该变量原先定义的类型。请看下面的例题:例2.5.2 数据类型的强制转换。
程序如下:

程序运行结果:

从上面的程序可以看到:将整型变量a强制转换成实型数据后除以b得到实型数据结果,而当第二次再用它除以b时,由于变量名前不再有强制转换符,故而系统仍旧作为整型数据处理,尽管赋值的变量d是实型的,但已是经过整型数据运算以后得到的结果。