short s=1; //s是short型
s=s+1; //s是int型,类型没有转换,所以错误short s=1;//s是short型
s+=1;//s 仍然是short型,好像是s+=1和s=s+1是相等的,但是他们的编译过程是不同的,s=s+1两边的类型不一样,但是s+=1是s=s的,是相加过后进行类型转换过后再赋值给s 的。

解决方案 »

  1.   

    short s=1; //s是short型
    s=s+1; //系统先把s+1的s转为整型,当然不可以赋值给那个s=的s
             //可以把s前面加个s=short(s+1)short s=1;//s是short型
    s+=1;//系统默认转型^_^,就好象同个s一样
      

  2.   

    s+=1
    相当于s = (short)(s + 1)在java 规范中可以看到。
    而s + 1 向但与(int)s + 1
    而对于强制性类型转化,如果从一个存取空间比较小的变量转化到一个存取空间比较大则没错误,如果倒过来就不行。
      

  3.   

    s=s+1;
    的时候,s是short,右边的short会向int转型。那证明了1是整形。
    那是否我们在初始化一个基础类型的时候,例如
    short s=1;
    上面的这个1是否也是int?而系统会自动把1转型成short?
    如果上面的成立,那么
    int i=5.0
    为何又不能成立呢?
      

  4.   

    主要是类型转化的问题
    说白了就是,小的可以往大的方面转型,但是大的要往小的方面转型,必须要强制转,不然当然要出错。楼上的int i = (int)5.0;就可以了,因为5.0 是float
      

  5.   

    楼上的没有理解到我的疑问。
    我的意思是:
    short s=1; //而此中的1是否为int呢?还是什么都不是,只是一个数值?
    s=s+1;  //此中的1为int
      

  6.   

    short s=(short)5.0;  //没问题。5.0先转型成short再赋给s;
    s=(short)(s+5.0);    //没问题。s向上转型成double,相加得到double类型再转型成short再赋给s;
    s=s+(short)5.0;      //有问题!为什么这里又会丢失精度?不是先执行括号的转型然后再相加吗?请谁针对这些很基础的问题详细说一下,或者提供一些文章。谢谢了!
      

  7.   

    要用s = (short)(s + 1)才行
      

  8.   

    那么
    short s = 1;
    s+ = 5.0;
    的s的数据类型又是怎么转化的
      

  9.   

    s+=5.0;
    //等价于下面的伪码:
    s=(short)(s+5.0);  //其中s+5.0的结果是double的。
      

  10.   

    很明显
    不是同一类型的
    一个是short,一个是int
      

  11.   

    整型常量默认具有int类型
    浮点型常量默认为double型
      

  12.   

    真搞不懂, 在C中那么简单的问题, 在JAVA中那么复杂!
      

  13.   

    chanceqw(★★★★★) ( ) 
    整型常量默认具有int类型
    浮点型常量默认为double型
    ____________________________________那为何short s=5;会自动转型?
    而    short s=5.0;不会?
    这种规定在哪里可以看到?
      

  14.   

    s=s+1 ;//  s+1已经转换为 int了。 short s= (int)s 当然不行。