我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情
转码起步,长途漫漫。本系列文章既是自己的JAVA学习笔记、概括与总结,也是激励自己坚持在这条路上走下去的动力。
类型转换
自动类型转换
什么是自动类型转换?
- 类值范围小的变量,可以直接赋值给类型范围大的变量。
为什么要进行自动类型转换?
- 存在不同类型的变量赋值给其他类型的变量
byte a = 6 ;
int b = a;
System.out.println(b); // 6
由byte的单字节(8位)直接自动扩展到了int的四字节(32位)。
范围大小:
byte --- short --- int --- long --- float --- double
因为表达范围的扩展,最终的结果类型由最高位类型所决定。同时,因为ASCII字符表存在的缘故,所以char也能转换为int类型,以此参与运算。
表达类型的自动提升
表达类型的自动转换是什么样的?
- 小范围的类型,会直接转化为大范围的类型运算,最终结果由表达式中最高类型来计算。
需要注意的点: byte, short, char这些类型是直接转化成int类型参与运算的。
byte a = 11;
byte b = 22;
int c = a + b; //a, b 已经转化成int来计算
强制类型转化
由上面的内容我们可以得到结论:范围类型大的数据或者变量,不能直接赋值给范围类型小的数据或变量。
什么是强制类型转换?
- 强行将类型范围大的变量,数据赋值给更小的变量。
数据类型 变量2 = (数据类型)变量1 数据;
int a = 20;
byte b = (byte) a ;
其底层原理是强行把多出的位数砍掉,在前面位数均为0的时候,不影响a的表达,所以如果要进行强制类型转换,一定要经过计算后确保强制类型转化不能造成数据的溢出或是丢失。
另外,浮点数强制转化为整数,会直接舍弃小数部分而直接保留整数部分返回。