正在看书本,碰到一些小问题,但是让人迷糊。short x=97;
short y=2;
x=x+y;   这行为什么就错误呢?说是等号右边的数值为int型,而等号左边是short型,从而引起错误。但是 x和y 都是short类型的,x+y怎么就变成int类型的了呢?

解决方案 »

  1.   

    JAVA中使用两个数值进行二元操作时,比如:x+y
    先要将两个操作数转换为同一种类型,然后再进行计算
    * 如果其中有一个为double类型,另一个转为double.
    * 否则,如果其中一个为float,另一个转为float.
    * 否则,如果其中一个为long,另一个转为long.
    * 否则,两个操作数都转为int.
      

  2.   

    short 在参与计算时首先会转化成int类型,看来的强制转换了。
      

  3.   

    byte,short,char在程序执行的时候 自动先转换成int类型,
    当要将x+y赋值给short类型的x时,要加上强制转换如  x=(short)(x+y)
      

  4.   

    short byte char 在执行的时候 会自动转换成整形也就是int类型 所以这样错误   可以改成x=(short)(x+y)这样就对了  还有如果x+=1就是正确的
    public class Test6 { /**
     * @param args
     */
    public static void main(String[] args) {
    short a = 8;
    a = a+8;  //错误 也改改成a = (short)a+8;
    a+=8;   //正确 }}
      

  5.   

    byte short char会自动提升到int~所以右边运算式的结果实质上是int型,而左边是short类型大小不匹配必然会报错。只需要写成x=(short)(x+y) 或者 x += y即可。(一般推荐使用后者,第一这种方法效率更高,第二无需手动强制转换)。望采纳~