先頭にゼロがある整数リテラルの不可解な動作
Java では、次のコードに示すように、先頭にゼロがある整数リテラルは予期しない動作を示します。スニペット:
System.out.println(0123); // Prints 83 System.out.println(123); // Prints 123
違いの理由
この違いを理解する鍵は、8 進数表現にあります。整数リテラルの先頭のゼロは、リテラルが基数 8 (8 進数) で表現されていることを示します。 8 進数では、各桁は 0 から始まる 8 の累乗を表します。
したがって、リテラル 0123 は次のように 10 進数に変換できます。
(0 * 8³) + (1 * 8²) + (2 * 8) + (3) = 83
対照的に、リテラル 123 は次のようになります。 10 進数で解釈され、各桁は 10 の累乗を表します。したがって、次のように評価されます。 123.
16 進リテラル
Java は、8 進数に加えて、0x プレフィックスを使用した 16 進数 (base 16) リテラルもサポートします。たとえば、0xFF は 16 進数の 255 を表し、2 進数では 11111111 に相当します。
推奨事項
混乱を避けるため、整数の先頭のゼロを省略することをお勧めします。 8 進数表現が明示的に意図されていない限り、リテラル。そうしないと、リテラルが 8 進数として誤って解釈され、予期しない結果が生じます。
以上がJava では「0123」は「83」と表示されるのに、「123」は「123」と表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。