2011-01-08 82 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