Java int division令我困惑

jjn*_*guy 10 java int division octal

我正在做非常简单的int划分,我得到奇怪的结果.

此代码2按预期打印:

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

此代码打印1期望:

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

这里发生了什么?

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

Gre*_*ill 22

该值0200八进制(基数为8)常量.它等于128(十进制).

Java语言规范的第3.10.1节开始:

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

  • 这是基于C语言最令人恼火的功能之一.我从未见过某人故意使用八进制常量,但我已经看到它会多次出现问题. (8认同)
  • 哇,我简直不敢相信我之前没有遇到过这个问题.我觉得自己像个白痴.谢谢! (2认同)
  • 我看着你的代表得分,虽然它一定是别的东西! (2认同)
  • 这是奥卡姆剃刀的案例.这通常是最简单的解决方案. (2认同)
  • 我故意使用八进制常量的唯一时间是在C`mkdir()函数中. (2认同)

moo*_*ogs 6

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

有关详细信息,请参阅"基元数据类型"解释的文字部分.