Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解释010或0110数字 为什么java JVM将int i=010或int i=0110作为八进制值,而不是整数值10或110?< /p>< p>当java被设计时,C和C++是它最大的竞争对手。java的设计者想使java类似C++和C++,这样程序员精通这些语言会发现转换更容易。许多java语法,包括八进制文字,都是由C或C++语法启发的。_Java - Fatal编程技术网

如何解释010或0110数字 为什么java JVM将int i=010或int i=0110作为八进制值,而不是整数值10或110?< /p>< p>当java被设计时,C和C++是它最大的竞争对手。java的设计者想使java类似C++和C++,这样程序员精通这些语言会发现转换更容易。许多java语法,包括八进制文字,都是由C或C++语法启发的。

如何解释010或0110数字 为什么java JVM将int i=010或int i=0110作为八进制值,而不是整数值10或110?< /p>< p>当java被设计时,C和C++是它最大的竞争对手。java的设计者想使java类似C++和C++,这样程序员精通这些语言会发现转换更容易。许多java语法,包括八进制文字,都是由C或C++语法启发的。,java,Java,八进制值与虚拟机无关。八进制值仅存在于源代码中。翻译是由编译器执行的。 < P>不仅在爪哇,这种行为几乎在所有的编程语言中都是C、C++等。如果按照编程规范,如果一个数字加上0,那么它将被视为八进制数,如果它被用0X加前缀,那么它将被当作十六进制数。 特别是在Java中,如果要声明二进制数,则必须在其前面加上0b。但是如果存在,您只能在Java 7或更高版本中使用它。您不应该混淆Java编译和JVM的功能 javac编译器愚弄了类似语言的Java规范和约定,将以0开头的数字视为八进制,0x视为十

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

< P>不仅在爪哇,这种行为几乎在所有的编程语言中都是C、C++等。如果按照编程规范,如果一个数字加上0,那么它将被视为八进制数,如果它被用0X加前缀,那么它将被当作十六进制数。
特别是在Java中,如果要声明二进制数,则必须在其前面加上0b。但是如果存在,您只能在Java 7或更高版本中使用它。

您不应该混淆Java编译和JVM的功能

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

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


简而言之,JVM对010没有任何概念,这是javac编译器的工作,因为语言规范说它应该这样做。

为什么不呢?这是规范。不是JVM,而是javac。请看语言规范,不是vm规范。@Sunil您可能想编辑这个问题。我想提出为什么Java语言支持八进制文字?或者类似的东西。但是,二进制格式为什么不被认为是二进制的?但是我们如何表示二进制格式,那么正如你所说的,我们需要使用前缀0b,但是只在java 7或更高版本中,然后在java java 1.4或5或6的较低版本中,这是不可能声明二进制的。Number@SunilSingh我不确定,但我认为在Java7之前声明二进制数是不可能的。