Java学习【3】自动转换总结,整型字面量与浮点型字面量的差异(猜想未证实)

Java学习【3】自动转换总结,整型字面量与浮点型字面量的差异(猜想未证实),第1张

Java学习【3】自动转换总结,整型字面量与浮点型字面量的差异(猜想未证实)

JAVA中,char(两字节)  short(两字节) byte(一字节) 这三者之间,只有byte->short可以自动转型,其他方向都是不会自动转的

虽然按照惯例,容量大的不能自动转换为容量小的,下面的程序会报错:

但是下面则正确编译了(整形字面量类型为int)

编译器发现右边是字面量而不是变量时,会判断一下是否超过了byte的表示范围,如果没有的话就不会出错

正如前言,以下程序也是正确的

但是,下面的程序却是错误的(小数字面量类行是double)

1.1并没有超过float的表示范围,却被判定无法自动转换

这是因为前面的例子都是整型,在不超过表示范围的情况下发生这种转换是安全的

而浮点型存在【精确度】的问题

double类型的字面量,虽然没有超出float的表示范围,在转换后仍旧会损失精度,所以是不被允许的

总结一(变量)

1、

整型变量之间,自动转型只能发生在变量类型的容量从小到大

而且牵扯到字符型,与数值型之间:char short byte 这三者之间,只有byte->short可以自动转型,其他方向都是不会自动转的

2、

浮点型变量之间,遵从小->大的规则

3、

整型变量能自动转换为浮点型变量

反过来不行

总结二(字面量)

1、

整型字面量不超出等号右边变量的范围的情况下,可以进行赋值(无需强制类型转换)

2、

双精度字面量不能赋值给单精度变量(即使没有超过表示范围也不能)

3、

整型字面量可以赋值给浮点型变量

浮点型字面值不能赋值给整型变量

值得一提的是,下面的程序,即使满足了【整形】【不超出表示范围】两个条件,仍旧是错误的

        byte b = (long)1;//错误

        byte b = 1L;//错误

        short s = (long)1;//错误

如果就这样认为将字面量强制转换后,就不能再赋值给小容量类型的变量,而是单纯进行像变量的类型判断,就错了,因为下面的程序通过了编译

byte b = (int)1;//正确

short s = (int)1;//正确

对于上面两行代码,具有以下猜想(并未证实):

整型字面量本就是int,强制转换成int的动作无效,赋值时编译器仍旧沿用了转型前的字面量判断方法,而非改为类型判断

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5703597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存