为什么一个长整数不能以零开始?

4

可能是重复问题:
09不被识别,而9可以被识别

我有一个疑问,当我声明以下内容时:

public static final long __VERSIONCODE = 0L;
public static final long __VERSIONCODE = 9L;

那会起作用,但每当我尝试这样做时:
public static final long __VERSIONCODE = 09L;
public static final long __VERSIONCODE = 08235L;

我在eclipse中遇到了一个错误:

"类型为long的09L字面量超出范围。"

于是我认为这是因为它以零开头。

但后来我尝试了第二个数字更低的八:

public static final long __VERSIONCODE = 07235L;

这给我带来了没有错误的结果。

接着:

public static final long __VERSIONCODE = 07239L;

我也遇到了错误。

所以我真的不明白哪些值可以分配给long,哪些不能。为什么会出现这些错误?(实际上,我只是好奇,我也可以使用字符串来表示我的版本代码)。

另外,我忘了提到,如果使用double而不是long,结果完全相同。

2个回答

17

当您在整型文字面量前放置一个0时,它会将其解释为八进制数。由于"9"不是八进制数的有效数字,所以可能就是这个问题。尝试打印"010L"的(十进制)值,看看是否显示为"8"来进行确认。

注意:不确定Java是否会这样做,还是仅是Eclipse的产物。如果是后者,则打印010L将显示10。如果是前者,则会显示8。如果这只是Eclipse的产物,您可以尝试01L、02L、...、07L,它们都应该可以工作,而08L和09L则会失败。


很可能就是这样,谢谢! - Twinone
特别是 07235 < 7235 - Joop Eggen
是的,它将其视为八进制。因此,8和9不是有效的数字: https://dev59.com/2Ww05IYBdhLWcg3weBvu - Darius X.
但是不知何故,“X”必须小于8,因为当我写int value = 0X1234;时,编译器会接受它。(;)) - Hot Licks
好答案 +1,从没想过 ;) - joey rohan

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接