Java int division令我困惑

我正在进行非常简单的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,在Eclipse 3.4.1中运行的Java 1.6)

0200八进制 (基数8)常数。 它等于128(十进制)。

从Java语言规范的3.10.1节 :

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

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

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

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

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

Howzzat?!