public static void main(String[] args) {
short s2 = 1;
s2 = s2 +1;
short s1 = 1;
s1+= 1;
System.out.println(s1);
}
为什么 s2 = s2+1报错
而 s1+=1就不报错呢?

解决方案 »

  1.   

    不是写法的问题,而是你的类型的问题,short。
      

  2.   

    short s2 = 1;
    s2 = s2 +1;//你这是一个短整型和一个整型运算,肯定会报错。
    short s1 = 1;
    s1+= 1;//这种写法,强制把1转换成short类型了,当然不会报错了。
      

  3.   

    因为需要类型强制转换  s2=(short)(s2 +1);  
      

  4.   

     s2 = s2+1报错的原因是1默认是int类型的,s2+1执行结束后java会自动向上类型转化为int类型,而
    s2是short类型的,short是不等于int的所以会报错,你 改成s2 = (short)s2+1就好了 而s1+=1不报错的原因是他和s2+1的处理机制不一样,java会对他自动进行处理
      

  5.   

    隐式转换short和int的问题
    你换成short s2=s1+(short)1;试试!
      

  6.   

    s2 = s2 + 1 ---> s2 = (int)s2 + (int)1;但是s2是short
    s1 += 1; ---> s1 = (short)(s1 + 1);short在于int相加的时候会自动升级到int的
      

  7.   

    LZ还会问,为什么 s2=s2+1--->s2=(int)s2+1;
    因为1是int型,s2是short,
    但是s2发现,呦我要和这个int搞基,我得变身。
    它一变转成了int型的s2
    所以  s2=(int)s2+1;还需要变身s2=(short)((int)s2+1);
    强调一下,s2本来就是short类型,不过因为运算把
    运算右边搞成int型,所以还需要转换回short型。
      

  8.   

    public class MM
    {
    public static void main(String[] args)
     {
     short  s2 = 1;
     s2=(short)((int)s2+1);
    short s1 = 1; 
    s1+= 1;
    System.out.println(s1);
    System.out.println(s2); 
    }
    }这样就行了  ,
      

  9.   

    对与你提的问题和我看的以上楼主的解释  我也是初学者 我实验了一下 对于s2=s1+(short)1;   和 s2=short(s2+1);都是不正确的  s2=(short)(s2+1);这才是正确的  希望对你有帮助;我们要对于任何问题都要亲自验证  
      

  10.   

    s2是short类型,和1运算的时候会强制转换成int,但是你把一个int的结果复制给short类型的s2,肯定会报错。
      

  11.   

     s2 = s2 +1;s2 +1会自动转换成int型的 所以赋值的时候会报类型转换错误。 short s1 = 1;s1+= 1; 不会变成不会发生类型转换。        
      

  12.   

    http://blog.csdn.net/qingyun1029/article/details/5938926
      

  13.   

    这都不结贴  服了   看3楼 简洁明了;
    其实还有个比较大的区别 大家都没说出来;那就是 s2+=1 比 s2 = s2 + 1 要耗性能。 为什么,你可以百度。 
    赶快 结贴吧~
      

  14.   

    s2 += 1 jvm会进行特殊处理,这个符号可以理解为java语言的语法糖。