2013-07-13 88 views
2

嗨,我是無法理解這是爲什麼不工作整數數量太大

if(Long.parseLong(morse) == 4545454545){ 
    System.out.println("2"); 
} 

莫爾斯在哪裏只是一個數字的字符串。問題是它說Integer數字太大:4545454545,但我相信一個Long可以比這個長得多。

+0

我相信你一定已經意識到了錯誤,直到現在..你正在比較一個整數和一個長。 Integer的最大值是2147483647,大約是您在那裏鍵入的一半。 – dharam

+0

yup從來不知道L到底有多長,謝謝 – Strife

回答

14

您需要使用4545454545l4545454545L才能將其限定爲long。默認情況下,4545454545int文字,而4545454545超出int的範圍。

建議使用大寫字母L爲了避免混淆,如l1看起來非常相似

你可以這樣做:

if(Long.valueOf(4545454545l).equals(Long.parseLong(morse))){ 
    System.out.println("2"); 
} 

OR

if(Long.parseLong(morse) == 4545454545l){ 
    System.out.println("2"); 
} 

JLS 3.10.1

如果後綴爲ASCII字母L或l(ell),則整數常量的類型爲long;否則它是int類型的(§4.2.1)。

+3

因爲'parseLong()'返回的是一個很長的原語,所以不需要使用'.equals()' - == ==就可以正常工作。 – berry120

+0

*不要*使用'l',使用'L'。兩者意味着同樣的事情,但前者可能會造成混亂,因爲它看起來像'1'。 – arshajii

+0

@arshajii注意到...... – NINCOMPOOP

0

您需要使用4545454545L4545454545l來限定它的長度。

+1

Long.parseLong()返回一個long(原始類型)。使用==很好。 –

3

如果你的整數值大於2147483647更大,因爲你的文字是,那麼你需要用很長的文字:

4545454545L

...注意L末,這之間的區別一個長整型文字。一個小寫的l也可以工作,但不易讀,因爲它很容易與1混淆(當你處理一個數字時不是一件好事!)

+1

+1提到可讀性問題。 – arshajii