基本:範圍小的類型會自動提升為數據範圍大的類型
範圍由小到大:byte < short < int < long < float < double
float的範圍是3.4e−038~3.4e+038比long的-9,223,372,036,854,775,808~9,223,372,036,854,775,807還廣,所以long可以被轉換成float,但float不能轉換成long
1 | int intOne = 1; |
如果想把float轉成long就會產生錯誤訊息 :cannot convert from float to long
1 | float floatThree = 2.01f; |
特殊:byte、short和char的運算結果為int
byte和byte以及short和short之間運算的結果為int,這個設計是為了避免運算過程超出byte和short的數據範圍
1 | // 先寫一個可以檢查數據類型的方法 |
特殊:不按照規則宣告變數的自動轉換
當宣告變數時不按照JAVA宣告變數,像是宣告long的時候沒有在數字後方加上L,則這個數據會被判斷為int,但因為int是可以轉換成
long的數據類型(int範圍小於long),所以編譯時不會報錯
1 | public static void main(String[] args){ |
同理如果是把範圍較大的double轉換成範圍較小的float,則會報錯
1 | public static void main(String[] args){ |
數據運算的預設類型
整數運算後的預設數據類型為int、有小數的數據則為double
1 | public static void main(String[] args){ |
如果運算結果超過int範圍的話,結果則還是int類型(但答案會很奇怪):
1 | public static void main(String[] args){ |
為了不產生奇怪的結果,則要使用Long,數據類型也會依照運算結果變成Long():
1 | public static void main(String[] args){ |
結論
JAVA數據類型是根據結果判斷的,如果兩種不同類型的數據進行運算,結果則會轉換為範圍大的數據類型;另外,運算結果會超出該數據類型的範圍,則會報錯或是產出不正確的答案,要謹慎選擇宣告類型。