请问为什么int常量可以直接赋给byte,short,而double常量不能直接赋给float?

时间:2021-07-07 15:28:14
将一个整型的常量(字面值为int)赋给一个byte或者short类型的变量,只要不超过byte或short取值范围,就可以通过编译
将一个浮点型的常量(字面值的double)赋给一个float类型的变量,即使不超过float的取值范围,也会出现编译错误

请问为什么Java中会有这种双重标准的设置?int类型的常量只要不超过范围就可以赋给更小的类型,而double类型的常量就算没有超过float的取值范围,也不能直接赋值给float(除非加f后缀或者强制类型转换),这样对于float来说是不是有点不公平?


byte a = 1;//编译通过
short b = 1;//编译通过
float c = 1.2;//编译报错

6 个解决方案

#1


float和double二进制表示不一样,没办法。

#2


因为计算机很傻 ,要加L它才明白 

#3


多谢Zang大侠,有门课专门讲过这个二进制表示的内容,居然给忘了,大侠这么一提点就记起来了。。。

#4


引用 1 楼 zangxt 的回复:
float和double二进制表示不一样,没办法。

原来如此

#5


这只能说明一个问题,你没有弄明白java数据类型的原理。把一个double类型的赋值给float当然编译不过了。

#6


另外 byte short char 在运算时都先转换成int 型,在计算。所以你赋一个int型它不会错了。

#1


float和double二进制表示不一样,没办法。

#2


因为计算机很傻 ,要加L它才明白 

#3


多谢Zang大侠,有门课专门讲过这个二进制表示的内容,居然给忘了,大侠这么一提点就记起来了。。。

#4


引用 1 楼 zangxt 的回复:
float和double二进制表示不一样,没办法。

原来如此

#5


这只能说明一个问题,你没有弄明白java数据类型的原理。把一个double类型的赋值给float当然编译不过了。

#6


另外 byte short char 在运算时都先转换成int 型,在计算。所以你赋一个int型它不会错了。