Java整数除法让我困惑

Java整数除法让我困惑,java,int,division,octal,Java,Int,Division,Octal,我在做非常简单的整数除法,结果很奇怪 此代码按预期打印2: public static void main(String[] args) { int i = 200; int hundNum = i / 100; System.out.println(hundNum); } public static void main(String[] args) { int i = 0200; int hundNum = i / 100; System.ou

我在做非常简单的整数除法,结果很奇怪

此代码按预期打印
2

public static void main(String[] args) {
    int i = 200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}
public static void main(String[] args) {
    int i = 0200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}
此代码将
1
打印为预期:

public static void main(String[] args) {
    int i = 200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}
public static void main(String[] args) {
    int i = 0200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}
这是怎么回事


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

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

发件人:

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


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


有关更多信息,请参阅说明的文字部分。

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

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


怎么了

哇,我真不敢相信我以前没碰到过这个。我觉得自己像个白痴。谢谢我看了你的代表分数,我想一定是别的什么!这是基于C语言最令人恼火的特性之一。我从未见过有人故意使用八进制常数,但我见过它多次导致问题。这是奥卡姆剃须刀的一个例子。这通常是最简单的解决方案。我唯一一次故意使用八进制常量是在C
mkdir()
函数中。我们检查一下API文档中的parseInt。它说明了一切:公共静态int-parseInt(字符串s)。。。将字符串参数分析为有符号十进制整数。字符串中的字符必须全部为十进制数字,但第一个字符可以是ASCII减号“-”(“\u002D”)以指示负值。parseInt分析基数为10的字符串。调用Integer.decode将0200解析为128。