java.lang.NullPointerException with boolean

2022-09-03 16:49:48

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

它给我一个错误

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));


    }
}

答案 1

null无法自动取消装箱到基元值,当您尝试将其与 进行比较时,就会发生这种情况。在booleantrue

param == true

的类型是 ,因此左手操作数也必须是 。您正在传入 一个 ,这是一个对象,但可以自动取消装箱到 。truebooleanbooleanBooleanboolean

因此,这等效于

param.booleanValue() == true

显然,如果是,则上述抛出。paramnullNullPointerException

为了避免自动取消装箱的隐藏陷阱,您可以改用对象:Boolean

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

答案 2

您的代码将实例与基元进行比较,这意味着取消装箱 .由于无法拆箱,因此抛出 a。java.lang.Booleanbooleanjava.lang.BooleannullNullPointerException

您可以通过使用内置常量和:Boolean.TRUEBoolean.FALSE

public static String bool(Boolean param) {
    if (Boolean.TRUE.equals(param)) {
        return "a";
    } else if (Boolean.FALSE.equals(param)) {
        return "b";
    }
    return "c";
}