byte b = 0xFFFFFFFF; //OK, because integer -1 sits between -128 and 127, FINE!!
char ch = 0xFFFFFFFF; //Not OK, because integer -1 does not sit between 0 and 65535, FINE!!
byte b = 0L; //Compiler says Not OK? But long integer 0 sits between -128 and 127?
我不相信Java編譯器在上面第三行代碼中應用的縮小規則。java中的隱式縮小規則
請幫我理解,這個縮小規則背後的邏輯。
無論哪個規則在上面的代碼中將整數縮小爲字節,不能將相同的規則應用於長(64位)到字節(8位)? – overexchange
@proxchange第一行是一個_numeric_文字 - 它可以被賦予一個'byte'。第三行是「長」,因爲你明確要求了一個。 「長」不能分配給「字節」。有人可能會爭辯說,編譯器可以檢查編譯時間常量,但它不會 - 它們是規則。 –
@proxchange添加了來自JLS的鏈接和相關報價。 – Jesper