为什么int j = 012给出输出10?

时间:2014-04-13 06:25:11

标签: java numbers integer literals

在我的实际项目中,偶然发生的是我修改过的小程序。

我无法弄清楚为什么输出 10

public class Int
{
    public static void main(String args[])
    {
        int j=012;//accidentaly i put zero 
        System.out.println(j);// prints 10??
    }
}

之后,我把两个零仍然给出输出10。

然后我将 012更改为0123 ,现在它输出的是83?

任何人都可以解释原因吗?

4 个答案:

答案 0 :(得分:21)

  

我将012更改为0123,现在是输出83?

因为,它被视为八进制基数(8),因为该数字在前导中为0。所以,它的相应十进制值是10

012:

(2 * 8 ^ 0) + (1 * 8 ^ 1) = 10

0123:

(3 * 8 ^ 0) + (2 * 8 ^ 1) + (1 * 8 ^ 2) = 83

答案 1 :(得分:6)

前导零表示该数字被解释为octal而不是十进制。

答案 2 :(得分:2)

您正在使用类型为int常量的八进制表示形式将常量分配给变量。因此,编译器使用此算法0 * 8 ^ 0 + 1 + 8 ^ 1 = 10将八进制表示形式的整数值转换为十进制表示形式,从而得到10,然后将j赋值为10。请记住,当您看到一个常数开始时0表示八进制表示形式的整数。即0111不是一百零一,而是1 * 8 ^ 0 + 1 * 8 ^ 1 + 1 * 8 ^ 2。

答案 3 :(得分:1)

如果数字以0开头,则该数字将被解释为八进制数字,而不是十进制。八进制值为8,十进制为10。

mInterfaceMock.Verify(x => x.MethodToTest(), Times.Once);