有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么会出现这种数字格式异常?

我有这个堆栈跟踪(部分)

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

  1. # 1 楼答案

    可能是因为他们的输入中有一个前导零

    这很好:

    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

    谈论晦涩难懂的事。:-)因此,如果您通过显示实际输入来更新程序以处理异常,您可能会发现它与这些内容类似