我编写了一些使用字符串来表示时间的代码,例如“0620”,但经过仔细考虑后,我意识到这些代码可以解析为短路,以便比较性能和存储增益。
在一个单元测试中,我写了一个简短的0620与一个返回值620进行比较,期望这个工作。但是,测试 0620等于620 (两者都是空头)都失败了。
错误消息显示0620被中断为400(400!= 620解释失败)。删除线索0解决了问题,但我想知道,这是怎么回事?
这不起作用
assertEquals("Time Failed", 0620, st.GetTime());
此作品
assertEquals("Time Failed", 620, st.GetTime());
答案 0 :(得分:6)
以0
开头的整数文字根据Java language specification被解释为八进制(基数为8):
八进制数字由ASCII组成 数字0后跟一个或多个 ASCII数字0到7并且可以 表示正,零或 负整数。
我相信这是Java从C继承的怪癖之一。
答案 1 :(得分:3)
0620表示java中的八进制(基数为8)我猜它在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