Android和Java中的短裤

时间:2011-01-08 21:18:38

标签: java android short

我编写了一些使用字符串来表示时间的代码,例如“0620”,但经过仔细考虑后,我意识到这些代码可以解析为短路,以便比较性能和存储增益。

在一个单元测试中,我写了一个简短的0620与一个返回值620进行比较,期望这个工作。但是,测试 0620等于620 (两者都是空头)都失败了。

错误消息显示0620被中断为400(400!= 620解释失败)。删除线索0解决了问题,但我想知道,这是怎么回事?

这不起作用

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

此作品

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

2 个答案:

答案 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

example from java tutorials at SUN/Oracle