Java语言是一种强类型语言,因此变量在使用前必须声明。
强类型语言有以下几个要求:
1)变量或者常量必须要有类型。只有声明类型之后,才能使用。
2)赋值时类型必须一致。
3)运算时类型必须一致。
在实际使用中会牵扯到类型之间的转换,Java提供了两种类型转换:
1)自动类型转换。不需要在程序中显示地编写代码,编译器自动完成类型之间的转换。
2)强制类型转换。需要在程序中显示地编写代码,强制编译器进行类型之间的转换。
由于基本数据类型中的boolean类型不是数字型,所以基本类型的转换是除boolean类型以外的其他7种基本类型之间的转换。
1.自动类型转换(隐式类型转换)
是指不用显示编写代码,系统自动地完成类型转换,由JVM自动完成。
1)转换规则:从占用空间小的类型转换到占用空间大的类型。
byte-->short(char)-->int-->long-->float-->double
例如byte类型可以自动转换为short类型
byte bo = 100;
short s = bo;
类型转换亦可跳跃转换:
byte byt = 8;
int n = byt;
2)注意事项:
在整数之间类型转换时,数值不会发生改变;而要将比较大的整数类型转换成小数时,由于存储原因,有可能造成精度的损失。
2.强制类型转换(显式类型转换)
是指需要显示地编写代码实现类型的转换。此类类型转换很可能造成数据的精度损失,所以想要使用此类类型转换,就必须接受这种损失。
1)转换规则:从占用空间大的类型转换到占用空间小的类型。
double-->float-->long-->int-->short(char)-->byte
语法格式:(转换的类型)需转换的值
代码示例:
double d = 3.14;
int i = (int)d;
//无条件舍掉小数点后面的数字--此为小数转换为整数的规则,所以此处i=3.
**如果相对浮点数进行舍入运算,以得到最接近的整数,那就需要使用Math.round方法
示例:
double x=9.99;
int n=(int)Math.round(x);//在此种情况下,n的值就是10.
当调用round的时候,仍然需要使用强制类型转换(int)。
其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。
2)注意事项:
(1)整数强制转换为整数时,取数字的低位。
例如,int转换为byte时,去掉int的低8位(即一个字节)
(2)强制类型转换通常会造成存储精度的损失,需谨慎使用。