将一个整型的常量(字面值为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;//编译报错

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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