0

为什么 java JVM 将 int i = 010 或 int i = 0110 视为八进制值,而不是整数值 10 或 110?

4

3 回答 3

5

在设计 Java 时,C 和 C++ 是它最大的竞争对手。Java 的设计者想让 Java 像 C 和 C++ 一样,这样精通这些语言的程序员会发现过渡更容易。Java 的许多语法,包括八进制文字,都受到 C 或 C++ 语法的启发。

八进制值与虚拟机无关。八进制值仅存在于源代码中。翻译由编译器执行。

于 2012-11-28T07:48:02.097 回答
3

不仅在 Java 中,这种行为几乎在所有编程语言中都存在,如 C、C++ 等。根据编程规范,如果一个数字以0为前缀,那么它将被视为八进制数,如果它以0x为前缀,那么它将被视为十六进制数。

特别是在Java中,如果你想声明二进制数,那么你必须在它前面加上0b。但是您只能在Java 7 or later(if exists).

于 2012-11-28T07:48:05.637 回答
0

您不应该混淆javacJava 编译器的功能和 JVM 的功能。

编译器愚弄了类似语言的javacJava 规范和约定,将数字开头0视为八进制、0x十六进制,在 Java 70b中视为二进制。

JVM 只看到二进制数字而不是文本,因此它不知道您是使用 0100 还是 0x40 还是 64 还是 0xb1000000,因为数字已经被转换。

简而言之,JVM 不知道010它是 javac 编译器的工作,因为这就是语言规范所说的它应该做的事情。

于 2012-11-28T08:46:49.527 回答