java - 为什么长期不能从零开始?

标签 java double native long-integer

<分区>

Possible Duplicate:
09 is not recognized where as 9 is recognized

只是想知道,当我声明以下内容时:

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 中):

"The literal 09L of type long is out of range."

所以我认为那是因为它以零开头。

但后来我尝试将第二个数字降低为八:

public static final long __VERSIONCODE = 07235L;

这没有给我错误。

然后:

public static final long __VERSIONCODE = 07239L;

也给我一个错误。

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

此外,我忘了提到使用 double 而不是长整型的行为完全相同。

最佳答案

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

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

关于java - 为什么长期不能从零开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567033/

相关文章:

java - 字符串 "1a"是否是词法分析器的错误?

JavafX 8 3D Z 顺序。重叠形状行为是错误的。

java - 在 Java 中将十进制( double )值 < 0.001 转换为字符串

java - 类对象的 equals() 和 ==

java - 连接 JSTL

c++ - C++ 中的静态常量双重初始化

c - 使用 union ,我可以通过 unsigned int 比较两个 double 吗?

android - 在 NativeActivity 中创建 OpenGL 着色器

c# - 在 native 可执行文件中嵌入 .net 二进制文件

android - 将 ionic 框架添加到现有的 android studio 应用程序