数据类型转换
当数据类型不一样时,会发生类型转换,类型转换分为以下两种:
1. 自动类型转换(隐式类型转换)
特点:不需要进行代码的特殊处理,自动转换
规则:数据范围从小到大转换,也就是说,数据范围小的可以转换为数据范围大的 ,例如int可转为Long
Long num=100;
对于该条语句,等号右边其实是int类型,左边是long类型,左右不一样,此处就是完成了自动类型转化
2.强制类型转换(显式类型转换)
特点:代码需要进行特殊的格式处理,不能自动转换
规则: 范围小的类型名 变量名=(范围小的类型名)范围大的数据; 例如
int num=(int)100L;
3.类型转换注意事项
-
强制类型转换一般不建议使用,会发生精度丢失,数据溢出等情况
通俗来讲,也就是大杯果汁放小杯会存在放不下的情况
int num=(int)6000000000000000L;
上面语句产生数据溢出,没有语法错误,但是存在输出与我们的期望值不一样
int num1=(int)3.9;//输出结果为3
上面语句产生精度损失 ,并非四舍五入
-
byte,short,char 都可以进行数学运算 例如"+""-"
char c='A';c=c+1;
此时c的值为66
-
byte,short,char 在进行数学运算的时候,先转换为int类型,再进行数学计算
byte num=1; byte num1=2; //byte result = num+num1; 编译时,会报错,在运算时,将byte转为了int应更改为: //byte+byte->int+int int result = num+num1; System.out.println(result);
注意:如果需要使用byte 需要进行强制类型转换,前提是逻辑上保持一致
布尔类型不能发生数据类型转换