Java JVM が整数値 10 または 110 ではなく、int i=010 または int i=0110 を 8 進数値と見なすのはなぜですか?
3 に答える
Java が設計されたとき、C と C++ が最大の競合相手でした。Java の設計者は、Java を C や C++ のようなものにして、これらの言語に堪能なプログラマーが移行しやすいようにしたいと考えていました。8 進リテラルを含む Java の構文の多くは、C または C++ 構文に触発されています。
8 進値は、仮想マシンとは関係ありません。8 進数値はソース コードにのみ存在します。翻訳はコンパイラによって実行されます。
Java だけでなく、この動作は C、C++ などのほとんどすべてのプログラミング言語で見られます。プログラミング仕様によると、数値の前に0が付いている場合は 8 進数として扱われ、前に0xが付いている場合は、その場合、16 進数として扱われます。
特に Java では、2 進数を宣言する場合は、前に0bを付ける必要があります。ただし、これは でのみ使用できますJava 7 or later(if exists)
。
javac
Java コンパイルが行うことと JVM が行うことを混同しないでください。
javac
コンパイラは、Java の仕様と同様の言語の規則をだまして、数値を8 進数、16 進数、Java 7では 20
進数として扱います。0x
0b
JVM はテキストではなく 2 進数しか認識しないため、数値が変換されているため、0100、0x40、64、または 0xb1000000 のどれを使用したかわかりません。
要するに、JVM は について何の考えも持っていません010
。これは javac コンパイラの仕事です。