short s1 =1;
s1+=1;是正确的。实际上是如何做的?  
而s1 = s1 + 1;是错误的。因为s1 + 1是int型。不能自动转换为short。
多谢各位。在线等

解决方案 »

  1.   

    s1 += 1; // 包含了一个隐藏的转型!自动产生的转型悄悄地把int数值的高两位给截掉了s1 = s1 + 1; //编译错误,它试图将int数值赋值给short变量,它需要一个显式的转型: 
      

  2.   

    貌似,java是在运算的过程中,才默认转换为int类型进行运算的吧,s1+=1,可能类似s1++吧,不属于运算过程吧~不清楚啊,等达人~
      

  3.   


    1,short s1 =1;
    这是JAVA编译器的特别规定。因为1是一个int,但若常量值在skort能表达的范围内,则编译器自动做一个(short)1的强制转换。
    2,s1 += 1 等价于:s1=(short)(s1+1);
    3,s1 = s1 + 1;将s1+1中的s1类型提升为int,结果为int,结果就是你看到的错误了
      

  4.   

    容量小的类型自动转换成容量大的类型在计算。
    byte,short,char -->int-->long-->float-->double
    byte,short,char之间不转换。可以直接用int类型(仅限数字)数字赋给 byte、short、char类型,只要不超过它们的范围。例如:
    byte a = 1; byte b = 2;  正确
    byte c = a+b;            错误
      

  5.   

    s1 += 1我认为 += 右边的1是数字,所以没问题而s1 = s1 + 1 右边是表达式,所以不行。
      

  6.   

    s1 += 1 等价于:s1=(short)(s1+1); 
      

  7.   

    si += 1; 是隐式转换,首先把si转化成int类型,最后得到的si是int类型
    si = si + 1; si是short类型,需要1转换成short类型,需要显式转换,从高到低,不会自动转换,所以会出现错误。
    Java中的基础,好好掌握。
      

  8.   

    int的精度比short的精度高,short和int做运算结果为高精度的int类型;s1+=1是做自加运算,结果还是short。
    ps:数据类型的精度从低到高为 byte short int long float double;另外char和整形数据做运算结果是int的
      

  9.   

    怎么我的理解和以上有点不同,如有错误望指导o(∩_∩)o...short s1 = 1;   编译正确是因为 int 类型的1 没有超出short的范围,所以不会提示出错
    s1 = s1 + 1;    s1是一个short类型的数,而1是一个int类型的数,int类型不能和short类型进行运算
      

  10.   

    s1 += 1 等价于:s1=(short)(s1+1);