2010-02-03 34 views
10

我有這個堆棧跟蹤(的一部分)爲什麼這NumberFormatException?

Servlet.service() for servlet action threw exception 
java.lang.NumberFormatException: For input string: "37648" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
at java.lang.Long.parseLong(Long.java:403) 
at java.lang.Long.valueOf(Long.java:482) 
at java.lang.Long.decode(Long.java:593) 

在我的日誌文件 之一,我不知道什麼是真正的輸入字符串。 但用戶發生了相同的堆棧跟蹤。

這樣的堆棧跟蹤會如何發生?

+1

請把它變成一個問題,到目前爲止它只是一個聲明 – daveb 2010-02-03 16:59:57

回答

29

可能是因爲它們在輸入中有一個前導零。

這種精細運行:

public class DecodeLong 
{ 
    public static final void main(String[] params) 
    { 
     long l; 

     l = Long.decode("37648"); 
     System.out.println("l = " + l); 
    } 
} 

但是,如果你改變了這個:

l = Long.decode("37648"); 

這樣:

l = Long.decode("037648"); 

...變爲無效八進制,並從異常Long.parseLong不包括前導零

Exception in thread "main" java.lang.NumberFormatException: For input string: "37648" 
     at java.lang.NumberFormatException.forInputString(Unknown Source) 
     at java.lang.Long.parseLong(Unknown Source) 
     at java.lang.Long.valueOf(Unknown Source) 
     at java.lang.Long.decode(Unknown Source) 
     at DecodeLong.main(DecodeLong.java:24) 

它不包括它,因爲decode電話parseLong不爲零,但設置爲8

談談晦澀的基礎。 :-)因此,如果您通過顯示實際的輸入來更新程序以處理異常,那麼您可能會發現它是沿着這些方向發展的。

+4

哇!榮譽找到! – 2010-02-03 17:11:34

+0

這正是我尋找的答案 – 2010-02-04 16:04:02

+0

@ Xavier:很高興幫助! – 2010-02-04 16:13:47

相關問題