我在eclipse中试了一下,如果int值较小的话,会内部转换,较大的话会提示error
不过double转float需要显示的转化
写成1.2f
建议看下类型向上向下cast的原则

解决方案 »

  1.   


    short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
      

  2.   

    1.2后面没有后缀f;则认为1.2是double类型的,而float f=1.2,则把double类型的赋给了float类型的(类型转换不合理),所以不匹配。short是整数类型,可以储存整数,所以,short s=20;是正常的赋值。
    还有,20 是short类型不是int类型,除非:int s=20才是int类型,然后short sh=s;这样才会发生类型不匹配的现象。
      

  3.   

    难道java中的整数常量不是默认为int类型的吗
      

  4.   

    难道java中的整数常量不是默认为int类型的吗默认是int,只不过当你给的值在short范围里面java自己帮你转换了而已。改大一点就会报错了。byte也一样
      

  5.   

    float f = 1.2; 
    这个不是赋值,而是定义,后面缺少了后缀f.要赋值你就重新定义一个double类型的变量,然后赋值,遵循数据类型转换原则。
      

  6.   

    short s = 20; 
    这里其实是2个动作
    1) short s; 声明了一个变量s,类型为short
    2)  声明的同时完成了初始化, 初始化的值为20
    所以这种情况下,下面的20被Java的编译器尝试与左边的s进行绑定,发现是范围内的数字,就绑定成功。
    而下面这种情况就会是编译错误
    int a = 20;
    short s = a;  提示你把一个int转换成short,注意这里int并未声明为final的而
      final int a = 20;
      short s = a; 是编译成功的,为什么,因为这时a就是final的,编译器把这个过程直接做了编译优化,认为等价于赋值
      short s = 20;
      

  7.   

    你说的我明白了, 但是float f = 1.2; 不适用于你上述所说的那两个动作吗