因为a, b, c都被声明为short型的,但是在进行运算的时候,a和b都会被先转化成int型的然后把结果赋给short型的c,也就是说两个int型数据的和被赋给一个short型的变量,怎么能不报错呢。

解决方案 »

  1.   

    2L表示个long型的值,当然不能直接赋给int型或是short型
      

  2.   

    顺便说一下
    a=2; 这个时候并没有把个int型的值赋给short变量
    只有在进行a+b运算的时候,才隐式地把a和b转化成int型的
      

  3.   

    是不是这里有变量的左值和右值得概念
    例如 
    public class Test
    {
    public static void main(String[] arg)
    {
    short a = 2;
    a = 300000; //错误
    }
    }
    用的是a的左值 a还是short类型的 所以也报错了
    c = a  + b 用的是a的右值所以就用了用了它的值类型 2的类型 int ??
    但是这样的话 变量的类型和它的值类型就会不一致了呀 不太合理啊
      

  4.   

    什么是变量的左值,右值啊?不明白
    short a = 2;
    //编译器会自动判断出a是short类型,且将2变成一个short并不存在问题,所以编译通过a = 300000;
    a = 3L;
    //编译器不能将右边的值直接转化成short,所以编译不通过
    a = b + c;
    //JVM对short的相加是先变成int来完成的,所以b+c的结果是一个int类型,所以将它赋给a会出错