2015-08-19 33 views
0

我有以下代碼:的Java:字節投問題

byte b=10; 
System.out.println("Test b:"+b); 

該代碼被編譯,沒有問題的作品。但是,我不明白爲什麼。 10在這裏是文字,它是整數文字(默認爲整數)。所以我們在這裏鑄造左邊的字節,右邊的是整數。而這正在縮小爲byte<integer。據我瞭解,縮小必須始終顯式轉換,否則代碼將無法編譯。任何人都可以解釋爲什麼這段代碼有效

+0

'長×= 1;'這個編譯過。但'int x = 100000000000000;'不會 –

+2

[Here](http://stackoverflow.com/a/12419618/1343161)是一個很好的解釋。 – Keppil

回答

4

它有效,因爲10是一個編譯時常量。編譯器可以推斷出它適合byte範圍,因此它允許分配。

你可以玩變量賦值。比如你做

byte b = 128; 

,那麼你會得到一個編譯錯誤,因爲128不適合byte範圍。在這種情況下,你可以做一個投:

byte b = (byte) 128; 

但後來你會溢出結束和b將進行評估,以-128

+0

那你能解釋爲什麼float f = 23.22不起作用嗎? 23.22也適合浮點範圍... –

+0

浮點值是其他內容 - 檢出[JLS](https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls -4.2.3) –

0

byte的最大值是127

10適合字節,因此它是一個有效的分配。

嘗試

byte b = 140; //it wont