2011-09-02 61 views
4

可能重复:
Integer with leading zeroesINT与领先0的行为怪异

有人能告诉我这到底是怎么回事呢?当我用前导零初始化一个int时,程序不会忽略这些零,而是执行一些我不知道的操作。

int num = 0200; 

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

System.out.println(033); // 27 
+0

@aaaa bbbb:您是否点击'close'链接并*实际*投票结束?你只是说你认为你应该投票结束? –

+0

我不是注册用户,所以我没有真正关闭。 –

回答

10

不确定的十进制值 - 它把它当作一个八进制文字,按Java语言规范,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都表示完全相同的整数值。

+0

当然,我不知道为什么我不能想到这一点。当我把9放在那里时,它给了一个错误!感谢Jon的快速回复! – Andrew

+0

好吧,即时删除我的答案。 Java规范应该足够清晰。 – Tom

6

这是一个八进制数字(基数为8)。

同样,0x27是一个十六进制(基数16)文字,用39