为什么 java JVM 将 int i = 010 或 int i = 0110 视为八进制值,而不是整数值 10 或 110?
user1623177
问问题
165 次
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
您不应该混淆javac
Java 编译器的功能和 JVM 的功能。
编译器愚弄了类似语言的javac
Java 规范和约定,将数字开头0
视为八进制、0x
十六进制,在 Java 70b
中视为二进制。
JVM 只看到二进制数字而不是文本,因此它不知道您是使用 0100 还是 0x40 还是 64 还是 0xb1000000,因为数字已经被转换。
简而言之,JVM 不知道010
它是 javac 编译器的工作,因为这就是语言规范所说的它应该做的事情。
于 2012-11-28T08:46:49.527 回答