带有 boolean 值的 java.lang.NullPointerException

标签 java methods

我根据另一个问题写了一个非常简单的代码,这里是:

它抛出一个错误

java.lang.NullPointerException line 5 and 17

我不知道我做错了什么。

 public class Main {

    public static String bool(Boolean param){
        if(param == true){    (line 5)
            return "a";
        }else if(param == false){
            return "b";
        }
        return "c";

    }

    public static void main(String[] args){

        System.out.println(bool(true));
        System.out.println(bool(null)); (line 17)
        System.out.println(bool(false));


    }
}

最佳答案

null 不能自动拆箱为原始 boolean 值,当您尝试将它与 true 进行比较时会发生这种情况。在

param == true

true 的类型是boolean,因此左侧操作数也必须是boolean。您正在传递一个 Boolean,它是一个对象,但可以自动拆箱为 boolean

因此这相当于

param.booleanValue() == true

显然,如果 paramnull,上面的代码将抛出 NullPointerException

为了避免自动拆箱的隐患,您可以改为使用 Boolean 对象:

if (Boolean.TRUE.equals(param))
  return "a";
if (Boolean.FALSE.equals(param))
  return "b";
return "c";

关于带有 boolean 值的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824269/

相关文章:

java - Spring 4 MVC 和 Websockets - 没有合适的默认 RequestUpgradeStrategy

javascript - 向 JavaScript 对象添加方法

java - 为什么我不能调用同名匿名类之外的方法

java - 在 java spring hibernate 的 userDAO 类中写什么东西

java - 这是什么意思 : ((Wrench)wrench). printInfo();

Java 在运行时加载外部类

java - 重写的方法不会抛出异常

java - 如何使用 java lambda 重写 ValueMapper 函数

java - 以下 Web 元素的 XPATH 是什么?

java - Android 中的 Nanohttpd 服务器