为什么长篇大论不能从零开始呢? [复制]

2023-12-09

可能的重复:
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;

这给了我没有错误。

then:

public static final long __VERSIONCODE = 07239L;

也给我一个错误。

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

另外,我忘了提到,使用双精度而不是长精度时,其行为完全相同。


当您在整数类型文字前面放置 0 时,它会将其解释为代表一个八进制数。由于“9”不是八进制数的有效数字,这可能就是发生的情况。尝试打印出“010L”的(十进制)值,看看是否显示“8”来确认。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么长篇大论不能从零开始呢? [复制] 的相关文章

随机推荐