2011-01-08 70 views
2

我写了一些使用字符串来表示时间的代码,例如“0620”,但经过仔细思考后,我意识到这些可以解析为短裤以获得比较性能和存储收益。Android和Java中的短裤

在一个单元测试中,我写了一个简短的0620与620的返回值进行比较,期待这个工作。然而,测试0620等于620(都是短裤)失败。

错误消息说0620被中断为400(和400!= 620解释失败)。去除铅0可以解决问题,但我想知道,这是怎么回事?

这不起作用

assertEquals("Time Failed", 0620, st.GetTime()); 

这个作品

assertEquals("Time Failed", 620, st.GetTime()); 

回答

6

一个整数文字开始与0被解释为八进制(基座8)按照Java language specification

八进制标记由一个ASCII的 数字0之后是一个或更多的 ASCII数字0到7和可以 代表正数,零或 的负整数。

我相信这是从Java C.

继承的怪癖之一
3

0620意味着八进制(基数8)在Java中我想这是相同的Android或0620 == 400不是620

 int decVal = 26; // The number 26, in decimal 
    int octVal = 032; // The number 26, in octal 
    int hexVal = 0x1a; // The number 26, in hexadecimal 

example from java tutorials at SUN/Oracle