本文介绍了数字以0开头时出现意外的int / Integer行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I can't understand why this is not printing the expected value (400300) when I put extra zeros in front of the number:

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

如果我在数字前加一个或多个零,则预期值为没有打印。

If I put one or more zeros in front of the number, the expected value is not printed.

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


推荐答案

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

Adding 0 to the front made the number an Octal literal. So:

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

请参阅JLS了解部分。引用:

See JLS for the relevant sections. Quote:

这篇关于数字以0开头时出现意外的int / Integer行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 05:30