short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 
      short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
第一个我可以理解,但是第二个为什么会出问题,请兄弟们帮我讲讲

解决方案 »

  1.   

    在ide的环境下,都有提示。这个比问别人要更快。
      

  2.   

    这个问题以前也看过,说是编译器的问题。而且i+=1效率还高。我是这样理解的s1=s1+1;是将右边的结果赋值给左边  有类型转换风险 而且 这种表示需要多一个临时空间存放变量 来适应s1=s2+1这种通用性。而s1+=1;是直接在原来变量的基础上累加。需要的资源少,性能可能高点。可能是将编译的风险推迟到了运行。这种类型转换的溢出可两个short相加的溢出并没有区别。
    -----------
    觉得追究这个问题意义不大,除非专门搞这个的。
      

  3.   

    第二个相当于下面这个语句把:
    short s2 = 1; s2 ++;
    个人意见!!
      

  4.   

    对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
    对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。