1、分为自动转换和强制转换。
(1)自动类型转换:
- 自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图2-6所示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
- 特例:可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
【示例2-26】自动类型转换特例
short
b =
12
;
//合法
short
b =
1234567
;
//非法,1234567超出了short的表数范围
- 测试代码:
(2)强制类型转换:
- 强制类型转换,又被称为造型,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
- 语法格式:
1
|
(type)var
|
运算符“()”中的type表示将值var想要转换成的目标数据类型。
【示例2-27】强制类型转换
1
2
3
4
5
6
7
|
double x = 3.14 ;
int nx = ( int )x; //值为3,浮点转int,会直接舍去小数部分,即使是3.99输出也是3
char c = 'a' ;
int d = c+ 1 ;
System.out.println(nx);
System.out.println(d);//值为98,因为字符c+整型1,会自动转为整型,输出d为整型
System.out.println(( char
)d);//值为b,可以将整型d强制转换为字符
|
图2-7 示例2-27运行效果图
- 当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成为一个完全不同的值。
【示例2-28】强制类型转换特例
1
2
|
int x = 300 ;
byte bx = ( byte )x; //值为44
|
- 新手雷区:不能在布尔类型和任何数值类型之间做强制类型转换