public class Test{

public static void main(String[]args)
{
byte b1=50,b2=12;
byte b3=b1-b2;
short s1=20,s2=12;
short s3=s1-s2;
System.out.print(s3);
System.out.print(b3);
}

}
   帮我分析上面的原因!谢谢!

解决方案 »

  1.   

    byte - byte 得到的是int
    你得造型啊。
      

  2.   

    byte b1=50,b2=12; 
    byte b3=(byte) (b1-b2); 
    short s1=20,s2=12; 
    short s3=(short) (s1-s2); 
    System.out.println(s3); 
    System.out.println(b3); 
      

  3.   

    刚网上查了下
    所有字面是整数的都是int型,所以加减后还是int型,当转型向范围小转换时,编译器就会报错。
    所以必须在加减后强制类型转换, 如:byte b3 = (byte)(b1-b2);
      

  4.   

    1.byte 与char在做数值运算(+ - * / % ~ & | ^ >> << >>>)时,都要自动转为int类型之后,再参与运算,运算结果也是int类型.
    2.一个小的类型赋给一个大类型时要强制转换,以通知编译器,你对强转的后果负责.
      

  5.   

    byte - byte = int.
    数据转型只能向字节较长的类型转
      

  6.   

    byte相减,得到的是int类型,要转型
      

  7.   

    大家都说的对,b1-b2首先系统会自动转换为int型进行计算,此时的计算结果为int类型。
    b3=b1-b2即为int向byte的转换,需要强制转换(byte)
      

  8.   

    byte,short,char进行算术运算时,先将自己转换成int型在计算,结果也是int的
      

  9.   

    整型计算后默认为int,必须进行强制转换
      

  10.   

    嗯。。都是会变成INT类型的,前面加个(byte)