2

当我在数字前面加上额外的零时,我不明白为什么这没有打印预期值(400300):

System.out.println(new Integer(0400300)); // prints 131264
System.out.println(0400300); // prints 131264

如果我在数字前面放一个或多个零,则不会打印预期值。

// JUnit test does not pass:
assertTrue(0400300 == 400300);  // returns false!?
4

1 回答 1

10

添加0到前面使数字成为Octal literal。所以:

0400300 = 3 * 8 ^ 2 + 4 * 8 ^ 5 = 131264

有关相关部分,请参阅 JLS 。引用:

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

于 2013-05-17T14:12:58.323 回答