なぜJava SEの数値リテラルにアンダースコアが1.7ルールは、8進数と16進数で異なっていますか?オクタル・リテラルのルールに違反していませんか?

Afikurラーマン:

よると、Oracleのドキュメントのアンダースコアだけで結構です番号の先頭に置くことはできません。それは八進数に来るときしかし、私たちは先頭にアンダースコアを置くことができます。それは奇妙ではないですか?

int x1 = 0x_52;            // Invalid; cannot put underscores at the beginning of a number
int x2 = 0_52;             // OK (octal literal)
アレックスK.:

ルールは、次のとおりです。

下線は、整数を表す数字の間のセパレータとして許容されます。

構成するものでは違いがある整数を表す数字、それが持つリテラルに来るときは基数接頭辞、進/バイナリのために:

...整数が数字のみで示された後の0xまたは0bの文字と任意の型の接尾辞の前に。したがって、アンダースコアは0Xまたは0B後、または数字の最後の桁の直後に表示されない場合があります

Howerver用オクタル・ルールは異なります。

10進数またはオクタルリテラルでは、整数リテラル内のすべての数字で示されている任意のタイプサフィックス前。したがって、アンダースコアは、最初の数字の前または数字の最後の桁の後に表示されない場合があります。下線が表示された後の最初の0進数字(0が整数の一部を表す数字であるため)とリテラル小数非ゼロに初期非ゼロ桁後。

参考:https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=192084&siteId=1