内部JVM如何解释010或0110数字

时间:2012-11-28 07:44:16

标签: java

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

3 个答案:

答案 0 :(得分:5)

当Java被设计时,C和C ++是其最大的竞争对手。 Java的设计者希望使Java像C和C ++一样,以便精通这些语言的程序员可以更容易地找到过渡。 Java的大部分语法,包括八进制文字,都受到C或C ++语法的启发。

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

答案 1 :(得分:3)

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

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

中使用此功能

答案 2 :(得分:0)

你不应该混淆javac Java编译的作用和JVM的作用。

javac编译器欺骗Java规范和类似语言的约定来处理数字以0开头为八进制,0x为十六进制,Java 7 0b为二进制

JVM只能看到二进制数而不是文本,所以它不知道你是使用了0100还是0x40还是64或0xb1000000,因为这个数字已被转换。

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