关于整数值中的前导零

nii*_*74u 4 java

我有以下代码

int a = 01111;
System.out.println("output1 = " + a);
System.out.println("output2 = " + Integer.toOctalString(1111));
Run Code Online (Sandbox Code Playgroud)

和输出是

output1 = 585
output2 = 2127
Run Code Online (Sandbox Code Playgroud)

我期待输出如下所示。

output1 = 2127
output2 = 2127
Run Code Online (Sandbox Code Playgroud)

为什么585当我打印直接 int 值时它会给出?我期待java自动将前导零的值转换为八进制。

01111和之间是什么关系585

Era*_*ran 6

前导 0 表示八进制数(基数为 8)。

01111(八进制)为1*8^3+1*8^2+1*8^1+1*8^0=585(十进制)

Integer.toOctalString(1111)将十进制数 1111 转换为八进制字符串。2127 八进制 (2*8^3+1*8^2+2*8^1+7*8^0) 是 1111 十进制。