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

cek*_*ock 2 java integer literals

当我在数字前面加上额外的零时,我无法理解为什么这不会打印预期值(400300):

System.out.println(new Integer(0400300)); // prints 131264
System.out.println(0400300); // prints 131264
Run Code Online (Sandbox Code Playgroud)

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

// JUnit test does not pass:
assertTrue(0400300 == 400300);  // returns false!?
Run Code Online (Sandbox Code Playgroud)

zw3*_*324 10

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

0400300 = 3 * 8 ^ 2 + 4 * 8 ^ 5 = 131264
Run Code Online (Sandbox Code Playgroud)

有关章节,请参阅JLS .引用:

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

  • 这是古老的,我不确定,但我认为这应该是从第一天开始的.但没有具体证据(JLS 1.0)我真的不能肯定地说. (3认同)