我有以下代碼:的Java:字節投問題
byte b=10;
System.out.println("Test b:"+b);
該代碼被編譯,沒有問題的作品。但是,我不明白爲什麼。 10在這裏是文字,它是整數文字(默認爲整數)。所以我們在這裏鑄造左邊的字節,右邊的是整數。而這正在縮小爲byte<integer
。據我瞭解,縮小必須始終顯式轉換,否則代碼將無法編譯。任何人都可以解釋爲什麼這段代碼有效
我有以下代碼:的Java:字節投問題
byte b=10;
System.out.println("Test b:"+b);
該代碼被編譯,沒有問題的作品。但是,我不明白爲什麼。 10在這裏是文字,它是整數文字(默認爲整數)。所以我們在這裏鑄造左邊的字節,右邊的是整數。而這正在縮小爲byte<integer
。據我瞭解,縮小必須始終顯式轉換,否則代碼將無法編譯。任何人都可以解釋爲什麼這段代碼有效
它有效,因爲10
是一個編譯時常量。編譯器可以推斷出它適合byte
範圍,因此它允許分配。
你可以玩變量賦值。比如你做
byte b = 128;
,那麼你會得到一個編譯錯誤,因爲128
不適合byte
範圍。在這種情況下,你可以做一個投:
byte b = (byte) 128;
但後來你會溢出結束和b
將進行評估,以-128
。
那你能解釋爲什麼float f = 23.22不起作用嗎? 23.22也適合浮點範圍... –
浮點值是其他內容 - 檢出[JLS](https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls -4.2.3) –
byte
的最大值是127
。
10
適合字節,因此它是一個有效的分配。
嘗試
byte b = 140; //it wont
'長×= 1;'這個編譯過。但'int x = 100000000000000;'不會 –
[Here](http://stackoverflow.com/a/12419618/1343161)是一個很好的解釋。 – Keppil