下面这段代码:
byte a=5;
byte b=a<<2;
为什么不行?
为什么
int b=a<<2;
就可以,哪位大侠解释一下。
  

解决方案 »

  1.   

    这样可以:byte a=5;
    byte b=(byte)(a<<2);a<<2的结果是int类型, 转到int类型需要类型强转
      

  2.   

    在java中,byte,char,short在运算时会自动转化为int。所以有两种办法,一个就是你下面的那种写法,二就是在运算的过程中强制类型转换!写成byte b=(byte)(a<<2);
      

  3.   

    类型转化的问题!byte short char 在运算时都会 变int  float和double都会变double 
      

  4.   

    這裡有說明。
    Java Language Specification
    概要的說 
    位元運算時,long 保持 long的type, float double無法做位元運算,其他都轉為 int 運算。但還是有些怪異,所以推論還有以下行為。
    雖然位移是轉 int, 可是 byte b = 5 << 2; 又不會有錯,因此雖然是轉 int ,
    但可以明確轉型的時候,還是會自己轉型。所以 byte 給 0~127 的 int 也不會有問題。而 byte b = a<<5; 應該是轉成 int, 又因為 a 是變數,所以不會自動帶 5 去判斷。
    因此造成型別錯誤。