Java 为什么会出现数字格式异常?

Java 为什么会出现数字格式异常?,java,Java,我有这个堆栈跟踪(部分) 在我的一个日志文件中 我不知道什么是真正的输入字符串。 但是用户已经使相同的堆栈跟踪发生 这种堆栈跟踪是如何发生的?可能是因为它们的输入中有一个前导零 运行良好: public class DecodeLong { public static final void main(String[] params) { long l; l = Long.decode("37648"); System.out

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

在我的一个日志文件中 我不知道什么是真正的输入字符串。 但是用户已经使相同的堆栈跟踪发生


这种堆栈跟踪是如何发生的?

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

运行良好:

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

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

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)