Long.getLong() 失败,将有效字符串返回为 null

42

我花了过去两个小时来调试,但这看起来极不可能。我将一个次要的Android Activity方法剥离到仅剩下这些代码:

public void onClick(View v) {
        String str = "25";
        long my_long = Long.getLong(str);
} // onClick (v)

是的,我遇到了老问题:NullPointerException:

09-11 02:02:50.444: ERROR/AndroidRuntime(1588): Uncaught handler: thread main exiting due to uncaught exception 09-11 02:02:50.464: ERROR/AndroidRuntime(1588): java.lang.NullPointerException

从其他测试中看来,Long.getLong(str)返回了NULL,这让我非常苦恼。我错过了什么吗?

先感谢您的帮助,我不介意自己犯的愚蠢错误,但是我的理智正在受到考验。


5
请使用 Long.parseLong(str) 代替 Long.getLong(str),两者功能类似但前者更直接明确。 - user370305
6个回答

123

你没有注意到Long.getLong(String str)的作用并不是将一个字符串解析为长整型值,而是返回由该字符串表示的系统属性的长整型值。正如其他人所建议的那样,你实际需要使用Long.parseLong(String str)


10
我经常在想getLong和其他基本类型的getX方法是用来做什么的。在我看来,让与系统变量相关的Long类拥有getLong方法似乎是一个非常糟糕的设计选择,或者只是对那些像我一样过度使用ctrl+space的人的诅咒。非常感谢您的回答。 - abondoa

12
你可以使用Long.parseLong(String)来代替getLong(String):这将解决该问题。

7

我认为您使用了错误的函数。请使用 Long.parseLong(str) 函数,这样您就可以得到正确的答案。


7

Long.parseLong(someString)被认可。如果有无法解析的字符串的可能性,请不要忘记捕获NumberFormatException。


6
为了理解这个,以下是一些例子:
Long val= Long.getLong("32340");

返回值: null

Long val = Long.getLong("32340", 3000);

返回:3000

使用 Long.parseLong() 方法:

Long val  = Long.parseLong("32340");

返回:32340

文档描述 getLong() 方法如下:

返回由字符串标识的系统属性的长整型值。

这是 getLong() 方法的代码,它只获取由字符串定义的属性值:

  public static Long getLong(String string) {
        if (string == null || string.length() == 0) {
            return null;
        }
        String prop = System.getProperty(string);
        if (prop == null) {
            return null;
        }
        try {
            return decode(prop);
        } catch (NumberFormatException ex) {
            return null;
        }
    }

如果你想将一个字符串解析成长整型,最好的方法是使用 Long.parseLong() 方法。


2
你可以使用Long.parseLong(String),而不是getLong(String):这将解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接