10

我正在做非常简单的 int 除法,我得到了奇怪的结果。

2此代码按预期打印:

public static void main(String[] args) {
    int i = 200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}

1此代码按预期打印:

public static void main(String[] args) {
    int i = 0200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}

这里发生了什么?

(Windows XP Pro、Java 1.6 在 Eclipse 3.4.1 中运行)

4

3 回答 3

22

该值0200是一个八进制(以 8 为底)常数。它等于 128(十进制)。

来自Java 语言规范的第 3.10.1 节

八进制数字由一个 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 组成,可以表示正整数、零整数或负整数。

于 2009-11-10T04:38:39.157 回答
6

值 0200 是八进制,十进制为128

有关详细信息,请参阅原始数据类型说明的文字部分。

于 2009-11-10T04:42:30.583 回答
1

在这里观察到一个有趣的行为。

如果我做一个Integer.parseInt("0200"),我会得到200o/p。

怎么样?!

于 2009-11-10T06:11:45.943 回答