为何short s1 = 1;是对的,而float f=3.4;是错的;为什么 int转short不需要强转

解决方案 »

  1.   

    因为java中把小数默认为double, java中把double赋值给float变量是错误的,应该用3.4f ( float型)
      

  2.   

    java中默认的浮点数是doube的,这就是为啥double  d=3.4不报错的原因
      

  3.   

    只要不超过short范围的就可以直接初始化,所以short s1 = 1;是对的
      

  4.   

           因为在java中数值类型的转换顺序由低到高依次是:byte→int→short→long→float→double,由低到高可以自由转换(隐式转换),不会报错,所以short S1=1(将int值放入short型数据中)是可以的;而由高到低则需要强制类型转换,以本例来说,将3.4(double型数据)放入float中,报错;
           从数据的角度说,就是排位较高的数值类型空间较大,字节数多,放入低位次时挤不下,数据溢出导致数据缺失,编译系统就报错,说:“大王,篮子装不下了,怎么办!”;强制转换的意思就是你对编译系统说:“没事,我家有矿,多出来的那部分数据我不要了,扔掉就行。“【手动滑稽】
           这种情况有两种改法:
                                              1.    float F1=3.4f;             //将3.4声明为float型;  (系统默认小数为double型);
                                              2.    float F1=(float) 3.4;     //利用强制类型转换(编译系统会提示你的);
         个人见解,欢迎讨论
      

  5.   

    1.首先,short是短整型,属于整型的一种,只是它是有一个范围的: -215 ~ 215-1,所以short s1 = 1;它在这个范围内,所以是对的。2.对于小数,在没有声明的情况下:float f=3.4; 为默认情况,也就是默认小数3.4此时为double类型,所以float f=3.4;这个写法是错误的,因为此时,公式是:左边是 float类型=右边是double类型,公式不成立。当在3.4后面写上f的时候,3.4被声明成float型;   float f=3.4f;这种情况下:左边是 float类型=右边也是 float类型,公式成立
      

  6.   

    整数直接量,默认是int型。所以int a = 4L; 会报错,但是long l = 4; 这样不会,因为这样会形成一个自动类型的转换,int类型自动转换为long类型
    小数直接量,默认是double类型。所以float f = 3.4; 会报错,由double类型转为float类型是大转小,需要强转。
    记住小类型转大类型会自动转换,大类型到小类型需要强转,因为会丢失精度或者溢出。(布尔型不参与,char类型相当于int类型)
    整数直接量可以直接赋值给byte,short,char,但是不能超出范围。
    byte,short,char型数据参与运算时,先一律转换为int再运算。
    所以:short s = 5;
    s = s + 10; // 这里会出现编译错误,因为s参与运算,这时会自动转换为int型,s + 10 的值为int型,int型不能直接赋值给short型,需要强转
    s += 10; // 这里不会出现错误,因为扩展赋值运算符自带强转功能
    大概就是这些注意的点。