架构图
前言
我们再进行Java程式编写时,常常会遇到运算的问题,例如常见的整数加减、浮点数的乘除、甚至是字元类型的运算。但很多时候运算的操作数不一定都是相同数据类型的
这时候我们就需要仰赖型别转换(Casting)将双方数据类型转换成统一类型,才可以继续运算。当我们说到型别转换,主要就是自动型别转换与强制型别转换两种
布林类型数据不能进行型别转换
自动类型转换
自动型别转换顾名思义就是不需要使用者进行手动添加操作,编译器自行就会进行处理的型别转换,所以又称为隐式型别转换。出现条件为转换后变数类型的存储范围大于转换前的存储范围时,例如:
整数之间
若是相同数据类型之间的自动型别转换,通常不会造成数据丢失或发生错误
byte b = 1;
short s = 256;
int i = 65538;
long l = 458294l;
l = i; // 自动型别转换
i = s; // 自动型别转换
s = b; // 自动型别转换
上述例子中,编译器会自动将语句进行转换,例如l = i
,经过编译器处理会变成l = (long)i
整数与浮点数
浮点数类型的存储范围较整数来得广,所以整数赋值给浮点数也是自动型别转换的一种
int i = 123456789;
float f = 12.3f;
f = i; // 自动型别转换
不过整数转浮点数的过程中很有可能发生赋值数据不一致问题。例如我们将上述范例执行一次,发现虽然整数可以自动转换成浮点类型,但精准度已经丢失
字元
字元类型数据也可以与浮点和整数之间进行转换,不过short与char之间不能进行自动型别转换,因为根据顺序转换表,char类型是直接转换成int
int i = 10;
char c = 'A';
float f = 12.3f;
i = c