在開始工做至今,學習各類各樣的技術之中發現本身的不少Java的基礎知識都忘了⊙﹏⊙b汗。。。 並且越是學習越是發現Java基礎的重要性,因此準備單獨抽一下時間進行Java基礎的從新學習。在從新學習的時候,對這些又有了不一樣的感悟,因而準備將這些都記載下來,並整理成博客,但願可以幫助那些須要的人。java
基本數據類型主要有這幾個:
byte、short、int、long、float、double、char、boolean
能夠分爲三類:數組
數值類型的級別從低到高分別爲:
byte,char,short(這三個平級)——>int——>float——>long——>double
其中由低級別轉到高級別,是屬於自動類型轉換,這點是由系統自動轉換的。學習
例如將int類型的數據轉爲float類型的數據。
示例:測試
int i=10; float j=i; System.out.println("i:"+i+",j:"+j);
結果:大數據
i:10,j:10.0
若是由高級別轉爲低級別,則須要強制轉換,也就是強制類型轉換。
例如將int類型的數據轉換爲byte類型的數據。
示例:spa
int i=127; int j=128; byte bye=(byte)i; byte bye2=(byte)j; System.out.println("i:"+i+",bye:"+bye); System.out.println("j:"+j+",bye2:"+bye2);
結果:3d
i:127,bye:127 j:128,bye2:-128
說明:由於 byte 類型是 8 位,最大值爲127,因此當 int 強制轉換爲 byte 類型時,值 128 時候就會致使溢出。因此在進行強制類型轉換的時候,要注意取值範圍!code
在強制轉換的時候須要注意數據的精確度,不然可能會出現數據精確丟失。
例如 double類型的數據轉換爲float類型數據。
示例:blog
double d=10.1111115; float f=(float) d; System.out.println("f:"+f+",d:"+d);
結果:get
f:10.111112,d:10.1111115
瞭解了數據類型的級別以後,若是用不一樣的數據類型進行計算,那麼最終的數據類型又是哪種呢?
這裏咱們用這幾種來測試:
1.byte 類型的數據 加 short 類型的數據;
2.short 類型的數據 加 int 類型的數據;
3.int 類型的數據 加 long 類型的數據;
這裏咱們使用這個方法來獲取最終的數據類型
public static String getType(Object o){ return o.getClass().toString(); }
代碼:
short a=1; byte b=2; int c = 3; long d = 4; System.out.println(getType(a)); System.out.println(getType(b)); System.out.println(getType(c)); System.out.println(getType(d)); System.out.println(getType(a+b)); System.out.println(getType(a+c)); System.out.println(getType(c+d));
結果:
class java.lang.Short class java.lang.Byte class java.lang.Integer class java.lang.Long class java.lang.Integer class java.lang.Integer class java.lang.Long
看到結果是否是有點吃驚呢?那麼是爲何呢?
這裏的不一樣的數值類型數據進行相加的時候,會自動轉換爲級別最高的那一個。
那麼short 類型的數據加 byte 類型的數據爲何是int類型呢?
由於在java的世界裏,若是比int類型小的類型作運算,java在編譯的時候就會將它們統一強轉成int類型。
若是上述很差理解的,那麼這裏咱們來作個實驗測試下,經過結果來進行驗證。
示例:
short a=1,b=2; byte c=3,d=4; System.out.println(getType(a+b)); System.out.println(getType(c+d));
結果:
class java.lang.Integer class java.lang.Integer
那麼這裏能夠得出結論,在數值類型中,若級別小於int,進行計算的時候,最終的數據類型會自動轉換爲int,若是高於int,最終數據結果會取其中最高的一個!