標題:
Java中數字的自動轉型?
發問:
- 怎麼練出胸肌-
- 我在merch now購買商品
- 急!!!! 徵求化學解答
- 哪些國家的觀光客最常來台灣旅遊?
- LG L7II、LG GJ、HTC 501哪隻比較好
- 北卡慈濟聯絡點
- 北夜四技二專怎麼登記分發--急急急
- ON OFF 504 I S桿身(黑色)9號鐵
- 我家最近要換冰箱嚕..想問一下對冰箱有研究的的人~
- 哪裡可以買到龍蝦沙拉、櫻花白魚...??
此文章來自奇摩知識+如有不便請留言告知
class GFC100{ public static void main(String[] args){ final short s1 = 1; //1 final char c1 = 1; //2 byte b1 = s1; //3 byte b2 = c1; //4 byte b3 = 1; //5 byte b4 = 1L; //6 byte... 顯示更多 class GFC100{ public static void main(String[] args){ final short s1 = 1; //1 final char c1 = 1; //2 byte b1 = s1; //3 byte b2 = c1; //4 byte b3 = 1; //5 byte b4 = 1L; //6 byte b5 = 1.0; //7 byte b6 = 1.0d; //8 } } 我想知道3、4、5為什麼可以通過編譯 而6、7、8為什麼不行?
最佳解答:
首先,在編譯時會對原始資料型態 (Primitive Type) 做大小的檢測,其標準如下: 原始資料型態 大小 最小值 最大值 char 16-bit Unicode 0 Unicode 216-1 byte 8-bit -128 +127 short 16-bit -215 (-32,768) +215-1 (32,767) int 32-bit -231 (-2,147,483,648) +231-1 (2,147,483,647) long 64-bit -263 (-9,223,372,036,854,775,808) +263-1 (9,223,372,036,854,775,807) float 32-bit 32-bit IEEE 754 floating-point numbers double 64-bit 64-bit IEEE 754 floating-point numbers boolean 1-bit true or false 以第 6 行 byte b4 = 1L; 為例,等號的左邊為 byte (8位元),而右邊為 long (64位元),將一個 64 位元大小的資料塞到 8 位元的空間會造成精準度的問題,因此在編譯時會有錯誤發生。同理可用於第 7、8 行。 第 5 行的等號右邊沒有指定是何種整數,因此會根據等號左邊的大小來試,由於 1 是在 byte 的大小範圍內,所以此行是合法的。若改為 byte b3 = 1000; 則會有編譯錯誤發生。 至於第 3、4 行,則是由於 s1 及 c1 為固定的常數 (final),故在編譯時會按照第 5 行的原則來做檢測。在這裡的情況來說,該兩參數都沒有超過 byte 的範圍,所以沒有編譯錯誤發生。
其他解答:6524A8F25B63629D
留言列表