请问为什么 x line 是对的但 y line 是错的[code=Java]
[public class Test
{
public static void main(String[] args)
{
//short s1=1;s1=s1+1; // x line
short s1=1;s1+=1; // y line
}}/code]

解决方案 »

  1.   

    首先x line 是错的但 y line 是对的
    其次这可能是运算符的要求。
      

  2.   


    s1+1
    s1是short型
    1是int型
    所以两个加完后是类型加大的那个,int但是s1=s1+1;赋值的时候,s1是short型,不能将int型隐式转换成short
    如果要转只能显示转换s1=(short)(s1+1);
      

  3.   

    这个解释是错误的,这么理解的话
    两个short想加呢?
      

  4.   

    楼主搞反了吧?short s1=1;
    s1=s1+1; // x line  错,需要类型转换 short + int short 要先扩充为 int 再相加(变为大数再相加减),结果为 int
    s1+=1; // y line  对, += 相当于 s1= (short) s1+1;
      

  5.   


    呵呵,跟着企鹅走...
    运算的时候,byte short int 都应该转换成int再进行运算吧。
      

  6.   


    我这样认为的
    首先 
    short s1=1;
    s1=s1+1;
    上面这段代码中 s1+1 的计算
    编译器会这样判断 :任意长度小于等于int的两个数(不管是byte,short,int)相加得到的结果总是int 型
    所以s1=s1+1; 中int 赋值给short 显然编译不让通过
    下面这段代码
    short s1=1;s1+=1; 
    这里+=,*=,-= 这些符合实际上使用的是隐式强制转换
    即先(short)s1+1;
    然后在赋给s1 所以这样可以通过.
      

  7.   

    short s1=1;s1=s1+1;s1+1的结果是int型的,需要强转成short型才能赋值给s1
      

  8.   

    short s1=1 ;s1=s1+1;
    因为1是int型的,而s1是short的,两者相加成为int 型,而你设置的s1是short型,所以出错~
    强制转换   s1=(short)(s1+1)后面的s1+=1,已经隐式的进行了强制转换·在eclipse中,你这样定义 short s1= 1 ;
    它就会提示出语法错误·
      

  9.   


    short可以转换int,但是int转short要强制转换
      

  10.   

    请问为什么 x line 是对的但 y line 是错的 [code=Java] 
    [public class Test 

    public static void main(String[] args) 

    //short s1=1;s1=s1+1; // x line 
    short s1=1;s1+=1; // y line 
    }}/code]
    是x行是错的吧,y行才是对的。s1=s1+1;首先会自动提升s1的类型为int,int类型是不能直接赋给short类型的,要强制转换。而s1+=1相当于赋值语句short s1=1;都是直接对其赋值,所以至始至终都是short类型。