为什么不能从零开始?

Twi*_*one 4 java double native long-integer

可能重复:
无法识别09识别为9的位置

只是想知道,当我宣布以下内容时:

public static final long __VERSIONCODE = 0L;
public static final long __VERSIONCODE = 9L;
Run Code Online (Sandbox Code Playgroud)

这将有效,但每当我尝试这个:

public static final long __VERSIONCODE = 09L;
public static final long __VERSIONCODE = 08235L;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误(在eclipse中):

"字体09L类型超出了范围."

所以我认为那是因为它从零开始.

但后来我尝试将第二位数字降低为8:

public static final long __VERSIONCODE = 07235L;
Run Code Online (Sandbox Code Playgroud)

这给了我没有错误.

然后:

public static final long __VERSIONCODE = 07239L;
Run Code Online (Sandbox Code Playgroud)

也给了我一个错误.

所以我真的不明白我可以分配给哪些值,而我不能.为什么我会收到这个错误?(这实际上只是我很好奇,我也可以只使用字符串作为我的版本代码).

另外,我忘了提到使用双精度而不是长排的行为完全相同.

Pat*_*k87 18

当您在整数类型文字前面放置0时,它会将其解释为表示八进制数.由于"9"不是八进制数的有效数字,因此可能正在发生这种情况.尝试打印出"010L"的(十进制)值并查看是否显示"8"进行确认.

注意:不确定Java是否这样做,或者这是否纯粹是Eclipse的工件.如果是后者,打印出010L会显示10.如果是前者,你会看到8.如果它只是Eclipse的一个工件,你可以通过尝试01L,02L,...,07L来确认,这些都应该可以工作,并且08L和09L会失败.