带有前导0的int表现得很奇怪

And*_*rew 4 java int

可能重复:
带有前导零的整数

有人可以告诉我这里发生了什么吗?当我使用前导零初始化一个int时,程序不会忽略零,而是做一些我不知道的其他操作.

int num = 0200;

System.out.println(num); // 128

System.out.println(033); // 27
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

当然 - 根据Java语言规范第3.10.1节,它将它视为八进制文字:

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

OctalNumeral:
        0 OctalDigits

OctalDigits:
        OctalDigit
        OctalDigit OctalDigits

OctalDigit: one of
        0 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)

注意,八进制数字总是由两个或更多个数字组成; 0总是被认为是十进制数字 - 在实践中并不重要,因为数字0,00和0x0都表示完全相同的整数值.


SLa*_*aks 6

这是一个八进制(基数为8)字面值.

类似地,0x27是十六进制(基数为16)的文字,十进制值为39.