有人可以告诉我这里发生了什么事吗?当我使用前导零初始化一个int时,程序不会忽略零,而是执行一些我不知道的其他操作。
int num = 0200;
System.out.println(num); // 128
System.out.println(033); // 27
答案 0 :(得分:11)
当然 - 根据Java语言规范,它将它视为 octal 文字,section 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
请注意,八进制数字总是由两个或更多个数字组成; 0总是被认为是十进制数字 - 在实践中并不重要,因为数字0,00和0x0都表示完全相同的整数值。
答案 1 :(得分:6)
这是一个八进制(基数为8)字面值。
同样,0x27
是十六进制(基数为16)的字面值,小数值为39。