带有boolean的java.lang.NullPointerException

Ale*_*cia 13 java methods

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

它给我一个错误

java.lang.NullPointerException第5行和第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));


    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nik 31

null无法自动取消装箱到原始boolean值,这是当您尝试将其与之比较时发生的情况true.在

param == true
Run Code Online (Sandbox Code Playgroud)

类型trueboolean,因此左手操作数也必须是a boolean.您传入的Boolean是一个对象,但可以自动取消装箱boolean.

因此这相当于

param.booleanValue() == true
Run Code Online (Sandbox Code Playgroud)

显然,如果paramnull,则上述抛出NullPointerException.

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

if (Boolean.TRUE.equals(param))
  return "a";
if (Boolean.FALSE.equals(param))
  return "b";
return "c";
Run Code Online (Sandbox Code Playgroud)

  • @sorin7486 它通常不起作用:`new Boolean(true) != Boolean.TRUE`。 (2认同)