java - 尝试返回 null 时出现 NPE

标签 java nullpointerexception

这个程序应该在用 null 调用 toFloat 时避免 null。 但我仍然得到 NPE ..任何帮助

System.out.println(toFloat(null, null));

private static Float toFloat(Float def, String str) {
    try {
        return str != null ? Float.parseFloat(str) : def;
    } catch (NumberFormatException e) {
        return def;
    }
}

最佳答案

这是非常微妙的。 Float.parseFloat返回 float,而不是 Float。条件运算符的后两个操作数必须是同一类型,但您给它 float(Float.parseFloat 的结果)和 Float (定义)。编译器选择 float,因为可以通过自动拆箱将 Float 强制为 float

那么编译器的输出就好像你写了这个:

private static Float toFloat(Float def, String str) {
    try {
        return str != null ? Float.parseFloat(str) : def.floatValue();
        // Note ----------------------------------------^^^^^^^^^^^^^
    } catch (NumberFormatException e) {
        return def;
    }
}

...当然,在 null 上调用 floatValue 会引发 NPE。

您可以通过确保第二个操作数的类型是 Float 而不是 float 来修复它。有很多方法可以做到这一点,但正如 Zefick points out ,最简单的是Float.valueOf(String) :

private static Float toFloat(Float def, String str) {
    try {
        return str != null ? Float.valueOf(str) : def;
    } catch (NumberFormatException e) {
        return def;
    }
}

关于java - 尝试返回 null 时出现 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695774/

相关文章:

java - 试图理解 join() 方法

java - 为什么我的 TimerTask.cancel() 返回 NPE ? (JAVA)

java - NullPointerException SynthLabelUI

android - 如何从 Android Studio 中的 Assets 中读取文本文件?

java - NullPointerException:FragmentManagerImpl.execPendingActions(FragmentManager.java:1410)

java - 尝试将文本设置为 fragment 中 Activity 中的 TextView 时出现 NullPointerException

java - 如何在android中创建可弹跳的 ScrollView ?

java - android - 抽屉图标点击不起作用

java - 从 Servlet 下载 Excel

java - 无法在 Eclipse 中创建 GWT Web 应用程序项目