short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型),这个我知道,但是为什么short s1 = 1; s1 += 1;可以正确编译的呢?

解决方案 »

  1.   

    T value;value +=  x;   <==> value = (T)(value+x);
    int x = 0;
    x += 1.1;也是OK的
      

  2.   

    没有理由,就是规定,就记住吧。
    同一个句子,程序与数学并不等价。
    比如int x = 1; x = x + 1; 任何一个不会程序的数学家,都会告诉你,x不存在(至少在实数领域)。但是任何一个程序员(C-style的),都会告诉你,就是这样子,没什么可解释的。
      

  3.   

    T value;value += x; <==> value = (T)(value+x);因为这个原因吧什么  i++ 也是同样的道理
      

  4.   

    java解惑 里面有
    会有一个机制 转回去 short类型的
      

  5.   


    short s1 = 1; s1 = s1 + 1; //这里需要显示的类型转换
    short s1 = 1; s1 += 1;//包含一个隐藏的转型
      

  6.   

    lz,有解释的,真有
    解释如下:
    s1 = s1 + 1; 
    这句的等号右边是一个short类型加一个int类型,
    原本2个不同类型的值是不能相加,但是,java有了自动转换的机制存在,会自动把short类型转换为int,
    使得s1 + 1变成了int类型加int类型,得到的结果就是一个int类型,再把这个int类型赋给左边
    但是问题出来了,左边是short类型,int类型是不能赋给short类型的,而且自动转换机制是不能自动把int类型转换为short类型的,于是就报错了
    s1 = (Short)s1 + 1; 这里就把s1 + 1得到的int类型强制转换为short类型,这样就可以赋给等号左边的short类型了,不会报错了建议lz去看一下java的自动转换机制
      

  7.   

    这个是java包装器自动完成的,在java-1.5好像以后就可以完全自己转换,只要的可转换的