2

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

在单元测试中,我有一个简短的写为 0620 与返回值 620 进行比较,希望这能起作用。但是,测试0620 等于 620(两者都是短裤)失败。

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

这不起作用

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

这个作品

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

2 回答 2

6

根据Java 语言规范,以 a 开头的整数文字0被解释为八进制(以 8 为基数):

八进制数字由一个 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 组成,可以表示正整数、零整数或负整数。

我相信这是 Java 继承自 C 的怪癖之一。

于 2011-01-08T21:21:33.820 回答
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

来自 SUN/Oracle 的 java 教程的示例

于 2011-01-08T21:21:29.430 回答