1. Java的數據類型
Java的數據類型包括基本數據類型和引用數據類型。其中基本數據類型就是我們通常所說的4類8種數據類型,如下圖所示,4類即整數類型、浮點數類型、字符型和布爾型,8種即byte、short、int、long、float、double、char、boolean,其中byte爲1個字節(1個字節有8位,即8bit),short爲2個字節,int爲4個字節,long爲8個字節,float爲4個字節,double爲8個字節,char爲2個字節,boolean爲1/8個字節,即1位(bit)。除了基本數據類型,還是引用數據類型,引用數據類型即數組、接口或類等。
2. Java基本數據類型的轉換
如果系統支持把某個基本類型的值直接賦給另一個基本類型的變量,則這種方式被稱爲自動類型轉換。Java中,當把一個表數範圍小的數值或變量賦值給另一個表數範圍大的變量時,系統就可以自動轉換,就如同兩瓶水,把小瓶的水倒入大瓶中時沒有任何問題。
如下圖所示,箭頭左邊的數值型可以自動轉到箭頭右邊的數值型。
如下代碼展示了Java的基本數據類型自動轉換的功能(代碼來自於《瘋狂Java講義》):
public class AutoConversion {
public static void main(String[] args) {
int a = 6;
//int可以自動轉換爲float類型
float f = a;
//下面將輸出6.0
System.out.println(f);
//定義一個byte類型的整數變量
byte b = 9;
// 下面代碼將出錯,byte型不能自動類型轉換爲char型
//char c = b;
// 下面是byte型變量可以自動類型轉換爲double型
double d = b;
//下面將輸出9.0
System.out.println(d);
}
}
此外如果希望把箭頭右邊的類型轉換成左邊的類型,則必須使用強制轉換語法:(type)value,例如int a = (int)1.0。下面代碼展示了Java的基本數據類型強制轉換的功能(代碼來自於《瘋狂Java講義》):public class NarrowConversion {
public static void main(String[] args) {
int iValue = 233;
//強制把一個int類型的值轉換爲byte類型的值
byte bValue = (byte)iValue;
//將輸出-23
System.out.println(bValue);
double dValue = 3.98;
//強制把一個double類型的值轉換爲int
int toI = (int)dValue;
// 將輸出3
System.out.println(toI);
}
}
除此之外,還有幾點重要說明:
-
boolean類型不可以轉換成其他類型,其他類型也不可以轉換成boolean類型。
-
byte、short、char之間不會相互轉換,三者在計算時首先轉換成int類型後再運算。
-
容量大的數據類型轉換成容量小的數據類型時,需要加強制轉換符,但是可能造成精度降低或移除。
-
有多重類型的數據在作混合運算時,系統首先自動將所有的數據類型轉換成最大的數據類型,然後再計算。
上述幾點的說明見如下代碼:
public class TestConvert {
public static void main(String[] args) {
int a = 200, b = 300;
double d1 = (a + b) * 1.2; //系統將其轉換成double計算
float f1 = (float)((a + b) * 1.2); //要加強制轉換符
byte b1 = 127;
byte b2 = 10;
//系統將其轉換成int類型進行計算,要加強制轉換符
byte b3 = (byte) (b1 + b2);
System.out.println(b3); //輸出-119
double d2 = 1e200;
float f2 = (float) d2; //float最多是10e38
System.out.println(f2); //輸出Infinity
float f3 = 1.53f; //必須加f
long l1 = 123;
long l2 = 4000000000L; //必須加L
float f = l1 + l2 + f3; //系統將所有類型全部轉換成float類型計算
long l = (long)f; //砍掉小數點
}
}
參考文獻:
瘋狂Java講義,李剛,電子工業出版社。