Java是一种强类型语言,每个数据都与特定的数据类型相关,但在运算过程中,允许整数类型、浮点数类型、字符类型的数据进行混合运算,运算前不同类型的数据首先要转换为同一类型,然后再进行运算。根据转换方式的不同,基本数据类型转换可分为两种:自动类型转换和强制类型转换。
1、自动类型转换
自动类型转换也叫做隐式类型转换,指的是两种数据类型在转换过程中不需要显式第进行声明。要想实现自动转换,两种数据类型之间彼此兼容,并且目标类型的取值范围大于源类型的取值范围。字节型(byte)、短整型(short)、整型(int)、长整型(long)、单精度浮点型(float)、双精度浮点型(double)之间是兼容的,它们的取值范围由低到高为:byte、char、short、int、long、float和double。字符类型(char)和整型(int)之间是兼容的,字符类型可以自动转换为整型。
自动类型转换示例如下:
byte b=127; //声明一个字节型变量,初值为127
short s=b; //把一个字节型变量自动转换为短整型,无需显式说明
int i=s; //把一个短整型变量自动转换为整型,无需显式说明
long l=i; //把一个整型变量自动转换为长整型,无需显式说明
float f=l; //把一个长整型变量自动转换为单精度型,无需显式说明
double d=f; //把一个单精度型变量自动转换为双精度浮点型,无需显式说明
char c='a'; //声明一个字符类型变量,初值为'a'
int i1=c; //把一个一个字符类型变量自动转换为整型,无需显式说明
2、强制类型转换
强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要进行显式地声明。当目标类型的取值范围小于源类型的取值范围时,自动类型转换无法进行,此时,需要进行强制转换。在进行强制类型转换时,会截断源类型数据的高位内容,因此,会导致精度下降或数据溢出。
强制类型转换示例如下:
double d=2.4E10D; //声明一个双精度浮点型变量,初始为2.4E10
float f=(float)d; //将一个双精度浮点型变量强制转换为单精度浮点型,需显式说明
long l=(long)f; //将一个单精度浮点型变量强制转换为长整型,需显式说明
int i=(int)l; //将一个长整型变量强制转换为整型,需显式说明
short s=(short)i; //将一个整型变量强制转换为短整型,需显式说明
char c=(char)s; //将一个短整型变量强制转换为字符类型,显式说明
byte b=(byte)c; //将一个字符类型变量强制转换为字节型,需显式说明