数字以0开头时出现意外的int / Integer行为

时间:2013-05-17 14:11:22

标签: java integer literals

当我在数字前面加上额外的零时,我无法理解为什么这不会打印预期值(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!?

1 个答案:

答案 0 :(得分:10)

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

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

请参阅relevant部分的JLS。引用:

  

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