3、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答案是前面错了 后面对了
但是这两个到底有什么区别啊!
第一个s1=s1+1 后面的1是int 。s1是short。 short+int=int 但是s1是short 所以要强制转换(不知道理解是否正确)
但是这第二个:s1 += 1不就是等价于 s1=s1+1 这样的话不就是和第一个相同了嘛?
那么s1=s1+1和 s1+=1到底有什么区别。
谢谢咯 呵呵!
有分析过程更好啊啊

解决方案 »

  1.   

    其实关键问题就是,数字“1”,类型是 int。而 s1 += 1,Java知道你企图做自增运算,所以会智能的变成 s1 = (short) (s1 + 1);所以,你理解了区别了吧?
      

  2.   

    short 长度比int长度长,所以s1 = s1 + 1 首先会将右边的s1转换成为int型,然后得到的值是2,2为int型。编译器会隐式的将int转换成short。所以会错误。而s1+=1是叫编译器做自增运算,会将1直接定义成和short类型。所以正确
      

  3.   


    wo c。原来是这样。。
      

  4.   

    到底是将1直接定义成和short类型再计算呢还是 一楼的那样(short) (s1 + 1);原来就是 s1+=1是编译器做自增运算,那么久相当于把short增加一而不和int的1做算术运算。
      

  5.   

       所有声明为short的类型变量在进行运算时都会自动转为int类型的变量,这样s1+1就不是short型的,而变成int类型的,这时再赋给还是short类型的s1就会报精度损失错误了,这样改下就不会报错了
    s1=(short)(s1+1),试试看!