2016-09-25 27 views
0

下面這段代碼的行爲就像這樣。第一個聲明給第二個罰款時編譯器錯誤,即使我們打印第二行的結果它給出1270的輸出而不是02366.所以在這種情況下它是否有任何特定的截斷或整數移位?編譯器在Integer上的行爲不同。爲什麼下面的代碼在一種情況下會給編譯器帶來錯誤?

public static void main(String[] args) { 

     int i =01339;//compiler error out of int range 

     int j= 02366;//works fine 

     System.out.println(j); //value 1270 

} 
+0

另外http://stackoverflow.com/a/35176662/139985 –

回答

2

字面在0開始是八進制(基數8)文字,其可以僅包含數字0到7,因此01339無效。

02366是2 * 8 * 8 * 8 + 3 * 8 * 8 + 6 * 8 + 6 = 1270

0

因爲在Java當定義從0開始其認爲作爲基座8號,因此它數轉換爲基數10並返回1270作爲輸出。

對於基座8唯一可能的文字是0至7,在這裏已輸入9這是允許的值外,因此顯示錯誤

相關問題