2015-05-26 182 views
-2

我試圖運行下面的代碼,我想不通爲什麼它打印爲什麼System.out.println(0_101);打印65?

System.out.println(0_101); 

任何人都關心闡明這一些輕?

+6

它的101是一個八進制文字,它的十進制值:1×8²+ 0×8¹+ 1×8⁰這是65. – Maroun

+1

你認爲應該打印什麼?你爲什麼這麼認爲? –

+2

@MarounMaroun,作爲回答發佈! :-) – aioobe

回答

2

按照JLS - Chapter 3. Lexical Structure

八進制標記由一個ASCII數字0,隨後的一個或多個ASCII的數字0到7穿插着下劃線,並可以表示正整數,零整數或負整數。

...

下劃線可以在一個八進制數字的初始0後出現(因爲0是表示整數部分的一個數字),並在一個非零小數字面初始非零數字之後。

所以101具有的十進制值:1×8²+ 0×8¹+ 1×8⁰,其是65.

注意_有僅僅是爲了清楚,它可以在int被用作以及幫助閱讀數字,例如1000000 vs 1_000_000。

+0

這是怎麼回事? int val = \ u0031 \ u0031 \ u0030 \ u0030 \ u0031;的System.out.println(VAL); //它會打印65 –

0

據printint的0_101如你所說其中octal字面是65