天天看點

java byte short_淺談java中byte short基本資料類型

首先,我們來看下這個程式:

不難發現,這個程式在結構上是沒有錯誤的,可是運作結果又是如何呢?

顯然,運作結果是錯誤的。

byte類型資料是不能直接相加的,相加會自動類型會轉換int型,是以這裡應該使用強制轉換。

這是修改後的程式。

運作結果正确

再比如:

byte a=1;

byte b=2;

byte c;

c=a+b; //這樣是計算不出c,是錯誤的

c=a+1; //這樣也是不能計算c的

c=64+1; //為什麼這樣就能計算c,在Java中這是什麼原理啊?

首先你要明确一點byte類型表示一個位元組8位,用來表示一些基本字元,int是長度為32位的整形數。當你在Java中給一個byte類型資料初始化時,你可以用字元,也可以用整數,但是這個整數必須要在-128和127之間(因為byte是8位),它會将這個數轉化為一個字元然後存放起來,是以你的前兩行代碼是沒有問題的。第四行就開始有問題了:a,b都是byte型,他們相加會先自動轉換為int然後相加,當然相加的結果也是int型的,但是你要将一個int型的數字賦給一個byte型的c顯然是要強制轉換的,是以Java會報編譯錯誤,第五行是同樣的道理。第六行有點特殊了,請注意,64+1編譯器會自動當做65來處理,這句和c=65效果是一樣的,由于65是在【-128,127】這個區間之間的,是以指派當然不會出錯啦。

在java中整數預設都上int型,意思就是你寫一個1那麼1就預設為int型。

浮點數預設為double型,同上

c=a+b; //byte+byte=int

c=a+1; //byte+int(1為int型上面解釋了)=int

c=64+1; //其實int+int=(?)就不好說了,這要考慮範圍,java編譯器幫你把類型轉換為你想要的類型,這裡就轉換為你想要的byte了。

但下面這樣就不行了

c=1+127//出錯,超出byte範圍