各位大虾,高手我是个JAVA 初学者有个问题不明白:public class StaticTest{
  public static void main(String []args){
    short i=1;
     i=(short)(i+1);//正确
     i=i+1;//错误
     i+=1;//正确, 
     System.out.println(i);
  }
}错误如下:
E:\java练习\StaticTest.java:6: possible loss of precision
found   : int
required: short
     i=i+1;//错误
        ^
1 errorProcess completed.
为什么呢?
i=i+1; 和 i+=1; 有什么不同? 谢谢大家!!

解决方案 »

  1.   

    i+1 变成了 int ,精度自动变了.
    i+=1 就不会.
      

  2.   

    为什么i+1 变成了 int ,精度自动变了.
    i+=1 就不会呢
    i=i+1;和i+=1;在执行的时候有什么区别呢?
      

  3.   

    i = i + 1 ;
    等于号的右边是一个short型数据和int型数据进行运算,那么它会都按int型来计算,得到的结果是int型,然后int型数据赋给short型变量,出现精度损失,所以编译报错。
    i=(short)(i+1); 在赋值前强制类型转换了,所以不报错。
    i+=1; 虽然等同与 i = i + 1 ;但是,在编译的时候可能是不同的,具体我也说不清楚,猜测可能是这种情况都按照i的数据类型来计算,而不是按照1的数据类型(int)来计算了。
      

  4.   

    谢谢HitXU!!
    编译器如何工作要是能知道的话就好了.
      

  5.   

    i = i + 1 ;
    等于号的右边是一个short型数据和int型数据进行运算,那么它会都按int型来计算,得到的结果是int型,然后int型数据赋给short型变量,出现精度损失,所以编译报错。
    i=(short)(i+1); 在赋值前强制类型转换了,所以不报错。
    i+=1; 虽然等同与 i = i + 1 ;但是,在编译的时候可能是不同的,具体我也说不清楚,猜测可能是这种情况都按照i的数据类型来计算,而不是按照1的数据类型(int)来计算了。=============================================
     
    i=i+1和i+=1是不同的.
    i=i+1 你上面已经解释了.但别忘记了,这个表达式是用了两个操作符"=" "+"
    而i+=1是用了一个操作符"+=" 它的意思就是在short型的i的基础上增加1;short是整形的一种,当然可以加1了.如同int可以加1一样.c++提供了操作符重载,java不提供这些功能,如同它不提供指针一样.但java的内定了类似的操作,但是内部隐藏了.如string+string等
      

  6.   

    shxchenwind(秋风扫落叶)的解释是对的!