85

コードの次のセクションが実行されたときに何が起こるかを正確に説明してください。

int a='\15';
System.out.println(a);

これは 13 を出力します。

int a='\25';
System.out.println(a);

これは 21 を出力します。

int a='\100';
System.out.println(a);

これは64を出力します。

4

3 に答える 3

116

'a'一重引用符で区切られた文字リテラル (例: などの二重引用符で区切られた文字列リテラルとは異なります"a") をint変数に割り当てました。Java は、16 ビットの unsignedcharから 32 ビットの signed への自動拡張キャストを行いintます。

ただし、文字リテラルがバックスラッシュの後に 1 ~ 3 桁の数字が続く場合、文字の8 進数(基数/基数8) 表現になります。したがって:

  • \15= 1×8 + 5 = 13 (改行; と同じ'\r')
  • \25= 2×8 + 5 = 21 (NAK 文字 - 否定応答)
  • \100= 1×64 + 0×8 + 0 = 64 (@記号; と同じ'@')

文字リテラルとエスケープ シーケンスの詳細については、JLS セクションを参照してください。

3.10.6 からのBNFの引用:

OctalEscape:
    \ OctalDigit
    \ OctalDigit OctalDigit
    \ ZeroToThree OctalDigit OctalDigit

OctalDigit: one of
    0 1 2 3 4 5 6 7

ZeroToThree: one of
    0 1 2 3
于 2013-10-01T04:40:20.797 に答える
19

表記\nnnは Java の 8 進文字コードを表します。したがってint a = '\15'、8 進文字 15 の自動キャストされた値aが 10 進 13 に割り当てられます。

于 2013-10-01T04:40:40.993 に答える
6

数字を引用符で囲んでいるという事実は、数字を文字リテラルとして解釈していると思われます。後続の数字は 8 進数でなければなりません。

于 2013-10-01T04:40:54.970 に答える