将一个浮点型的常量(字面值的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
原来如此
#5
这只能说明一个问题,你没有弄明白java数据类型的原理。把一个double类型的赋值给float当然编译不过了。
#6
另外 byte short char 在运算时都先转换成int 型,在计算。所以你赋一个int型它不会错了。
#1
float和double二进制表示不一样,没办法。
#2
因为计算机很傻 ,要加L它才明白
#3
多谢Zang大侠,有门课专门讲过这个二进制表示的内容,居然给忘了,大侠这么一提点就记起来了。。。
#4
原来如此
#5
这只能说明一个问题,你没有弄明白java数据类型的原理。把一个double类型的赋值给float当然编译不过了。
#6
另外 byte short char 在运算时都先转换成int 型,在计算。所以你赋一个int型它不会错了。