ホームページ >Java >&#&チュートリアル >Java で「0123」が「83」と表示されるのはなぜですか?
先行ゼロにより整数の解釈が混乱する
整数リテラルを扱う場合、先行ゼロの存在により予期せぬ結果が生じる可能性があります。次のコードを考えてみましょう:
System.out.println(0123); // prints 83 System.out.println(123); // prints 123
最初の行に 123 ではなく 83 が出力されるのはなぜですか?キーは先頭の 0 にあります。
8 進数の解釈
整数リテラルの先頭の 0 は、数値が 8 進数 (base-8) で表現されていることを示します。 8 進数を 10 進数に変換するには、各桁を右から左に適切な 8 のべき乗で乗算し、その結果を合計します。
0123 の場合、次のようになります。
(1 * 8 * 8) + (2 * 8) + (3) = 83
したがって、0123 は 10 進数値 83 として解釈されます。
理由8 進浮動小数点はありませんか?
不思議なことに、Java では 8 進浮動小数点リテラルが許可されていないため、この動作は整数にのみ適用されます。
ベスト プラクティス
混乱を避けるために、整数リテラルでは先行ゼロの使用を避けることが一般的に推奨されます数値を 8 進数として解釈することを特に意図しない限り。
以上がJava で「0123」が「83」と表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。