0

Java JVM が整数値 10 または 110 ではなく、int i=010 または int i=0110 を 8 進数値と見なすのはなぜですか?

4

3 に答える 3

5

Java が設計されたとき、C と C++ が最大の競合相手でした。Java の設計者は、Java を C や C++ のようなものにして、これらの言語に堪能なプログラマーが移行しやすいようにしたいと考えていました。8 進リテラルを含む Java の構文の多くは、C または C++ 構文に触発されています。

8 進値は、仮想マシンとは関係ありません。8 進数値はソース コードにのみ存在します。翻訳はコンパイラによって実行されます。

于 2012-11-28T07:48:02.097 に答える
3

Java だけでなく、この動作は C、C++ などのほとんどすべてのプログラミング言語で見られます。プログラミング仕様によると、数値の前に0が付いている場合は 8 進数として扱われ、前に0xが付いている場合は、その場合、16 進数として扱われます。

特に Java では、2 進数を宣言する場合は、前に0bを付ける必要があります。ただし、これは でのみ使用できますJava 7 or later(if exists)

于 2012-11-28T07:48:05.637 に答える
0

javacJava コンパイルが行うことと JVM が行うことを混同しないでください。

javacコンパイラは、Java の仕様と同様の言語の規則をだまして、数値を8 進数、16 進数、Java 7では 20進数として扱います。0x0b

JVM はテキストではなく 2 進数しか認識しないため、数値が変換されているため、0100、0x40、64、または 0xb1000000 のどれを使用したかわかりません。

要するに、JVM は について何の考えも持っていません010。これは javac コンパイラの仕事です。

于 2012-11-28T08:46:49.527 に答える