short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) 
short s1 = 1; s1 += 1;(可以正确编译)

解决方案 »

  1.   

    s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。
      

  2.   

    short s1 = 1; s1 += 1;//这个也不相当于 s1 =s1+1;
    为什这个能通过而 s1 =s1+1;
    不能通过啊,新手请各位前辈指点
      

  3.   

    http://blog.csdn.net/exceljava/archive/2007/10/10/1819291.aspx
    可以看一下
      

  4.   

    s1是short型,s1+1是int型,不能显式转化为short型。
    楼主特意散分么
      

  5.   

    1为int型,i为short型,相加之后,就为int型,
    所以不能赋给
      

  6.   

    1为int型,s1为short型,相加之后,就为int型, 
    所以不能赋给short型的s1,可以进行一个强制类型转换s1 =(short)(s1 + 1) 
    就可以了
      

  7.   

    short s1 = 1; s1 += 1;(可以正确编译)这个为什么对
    错的大家都晓得,对的为什么?????、?
      

  8.   

    这个问题和+=的运算功能有关
    第一种方式:
    short s1 = 1; s1 = s1 + 1;需强行转化
    因为short s1=1在栈中开辟了一个short类型的空间;
    而s1=s1+1;中s1是short类型,在栈中开辟了一个short类型的空间,而1是int类型,
    int类型比short类型大,所以相加后的结果应为比较大的类型,把s1+1的结果赋予short类型的变量s1,固然需要强行转化;
    第二种方式:
    short s1 = 1; s1 += 1;(可以正确编译)
    由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;
      

  9.   

    第一种方式:
    short s1 = 1; s1 = s1 + 1;需强行转化

    自动类型提升
    :当分析表达式时,Java自动提升各个byte 型或short型的操作数到int 型。
       
      根据自动类型提升,我们知道,s1 (short型)+ 1(int型),结果为(int),将int赋值给short,会损失精度,当然不可以了。第二种方式:
    short s1 = 1; s1 += 1;(可以正确编译)
    自加没有自动类型提升问题
    由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;-----------------
    类型提升的约定
      a和b作某种运算
      a和b中有double,结果就是double
      a和b中有float,结果就是float
      a和b中有long,结果就是long
      除此之外,结果都是int
      

  10.   

    整型的默认的类型为int型,遇到一个数,她就将其认为int型的,
    然后是s1 = s1 + 1.他的结果为int的
      

  11.   

    +=会自动类型转换,
    s1 =(short)(s1 + 1)也还可以s1 = s1 + (short)1
      

  12.   

    s1 =(short)(s1 + 1)也还可以s1 = s1 + (short)1
    这个不行
    就用s1 =(short)(s1 + 1)就行了
    s1 = s1 + (short)1还得s1=(short) (s1 + (short)1),多此一举了,呵呵