数据类型间的转换
类型转换就是将某个数值从一种数据类型更改为另一种数据类型。Java中通常存在3种类型转换方式:
基本数据类型之间的类型转换
字符串与其他数据类型的转换
引用类型间的类型转换
下面分别介绍这3种类型转换方式。
1.基本数据类型之间的类型转换
在Java语言中,当多个不同基本数据类型的数据进行混合运算时,如整型、浮点型和字符串型进行混合运算,需要先将它们转换为统一的类型,然后再进行计算。
基本数据类型之间的转换可以分为3种:自动类型转换、强制类型转换和通过包装类进行过渡转换。
自动类型转换
从低级类型向高级类型的转换为自动类型转换,Java编程人员无需进行任何操作,由计算机自动地转换数据的类型。低级类型指取值范围小的类型,高级类型指取值范围大的类型,如int型相对于short型是高级类型,而相对于long型则是低级类型。不同基本数据类型间的混合运算存在以下4种情况。
(1)byte、short、char、int、long、float中的一种或多种类型数据与double型数据进行混合运算,可进行如下表示:
(byte、short、char、int、long、float) op double àdouble
该规则表明,当存在double型的数据参与计算时,其他所有数据都会被自动转换为double类型,并且计算结果为double型。
说明:箭头左边表示进行计算的各基本数据类型的数据,op表示操作符(如加“+”、减“-”、乘“*”、除“/”等),箭头右边表示自动转换后的数据类型。
例如:
System.out.println(200/4.5); //int型与double型数据进行运算, 输出结果为: 44.44444444444444
System.out.println(12.1F-1.0); //float型与double型数据进行运算, 输出结果为: 11.100000381469727
(2)byte、short、char、int、long中的一种或多种类型数据与float型数据进行混合运算,可进行如下表示:
(byte、short、char、int、long) op float àfloat
该规则表明,在不存在double型的数据情况下,若有float型的数据参与计算,则其他所有数据都会被自动转换为float类型,并且计算结果为float型。
例如:
System.out.println(200/4.5F); //int型与float型数据进行运算, 输出结果为: 44.444443
(3)byte、short、char、int中的一种或多种类型数据与long型数据进行混合运算,可进行如下表示:
(byte、short、char、int) op long àlong
该规则表明,在不存在浮点型数据的情况下,若有long型的数据参与计算,则其他所有类型数据都会被自动转换为long类型,并且计算结果为long型。
(4)byte、short、char中的一种或多种类型数据与int型数据进行混合运算,可进行如下表示:
(byte、short、char) op int àint
该规则表明,在不存在浮点型和long型数据的情况下,若有int型的数据参与计算,则其他所有类型数据都会被自动转换为int类型,并且计算结果为int型。
(5)只存在byte、short、char类型间的混合运算,可进行如下表示:
(byte、short、char) op (byte、short、char) àint
该规则表明,在只有byte、short和char类型间的数据进行混合运算时,所有的类型数据都会被自动转换为int类型,并且计算结果为int型。
例如:
byte a=8;
short b=2;
short c=a+b; //编译出错, 表达式"a+b"的值的类型为int
注意:
byte、short类型变量与char类型变量之间的赋值不允许自动转换,可进行强制类型转换,但如果一个字符常量值在byte或short类型的取值范围内,则可以将该字符常量直接赋值给byte或short型变量,例如:byte bt='a'或short st='z'是合法的。
从低级类型向高级类型的转换通常是比较安全的,因为低级类型数据的取值范围包含在高级类型数据的取值范围内,不会出现数据溢出或精度下降的情况。但在个别情况下,自动转换就会导致数据溢出的现象,例如:
int num1=2147483647; //定义int型变量num1, 并赋值为int类型的最大值
char c='A'; //定义char型变量c, 并赋值为字符'A'
来源:网站源代码
原文地址:http://www.isstudy.com/java/1567.html