Java基本数据类型转换
1 boolean类型不可以转换成其他的数据类型,其他类型也不能转换为boolean类型。
2 整形,字符型, 浮点型的数据在混合运算中可以互相转换。
* 容量小的类型自动转换成容量大的数据类型。数据类型按容量大小排序为:
# byte, short, char->int->long->float->double
# byte, short, char 之间不会互相转换,他们三者在计算时首先转换成int类型
* 容量大的数据类型转换成容量小的数据类型时,需要加上强制转换符,但可能造成精度降低或溢
出,使用时要格外注意。
* 有多种类型的数据混合运算时,系统首先自动的转换成容量最大的那一种数据类型,然后再进行计算
* 实数常量(如: 1.2)默认为double
* 整数常量 (如:123)默认为int
典型例子分析:
(1) byte b1 = 1;
byte b2 = 2;
byte b3 = (byte) (b1 + b2);
分析:看到一个整数,如无指明,则系统默认为int型。一个int型的数可以直接赋值给byte,short,
char但不能超过他的范围(如:byte表示范围为:-128-127,所以我们不能把129赋给一个byte)如:
long l = 30000000000l;//此处必须加l。不加则显示错误信息:过大的整数。
(2) 整数的溢出与实数的溢出存在不同之处:
如:byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)( b1 + b2);
分析:很明显b3溢出了,不过打印出来的结果会显示-100,这是因为整数的溢出是直接取其低字节,而把高字节去掉。但是:
double d = 1e200;
float f = (float)d;
则打印出来的结果显示为:Infinity。只是因为浮点数在计算机内部表示时还要考虑到小数点,所以如果直接把高字节的去掉是不行的。
(3)可以把float强制转换成long类型,舍去小数部分,而不是简单的四舍五入。
注:float f = 0.1;
看到一个浮点数,如无指明,则系统默认为double型,因此要变成float型,需要指明或作强制转换:
正解:float f = 0.1f; 或者:float f = (float) 0.1;
(4) 错例:float f = 0.1 + 123 * 0.1;
分析:由于有多种类型的数据混合运算时,系统首先自动的转换成容量最大的那一种数据类型,然后再进行计算。此处结果为double型,如需强制转换成float型:
float f = (float)( 0.1 + 123 * 0.1);