当前位置: 首页 > 知识库问答 >
问题:

为什么布尔空对象给我空指针异常,但字符串不给我NPE,而使用==运算符[重复]进行比较

黄无尘
2023-03-14

为什么比较null布尔值变量可以使用操作符得到NPE,但对null字符串变量使用相同的操作符不能得到NPE

代码段:

public static Boolean disableDownloadOnShareURL = null; 
public static String hi= null;

public static void main(String[] args) 
{
    try
    {
        if(disableDownloadOnShareURL == true)
            System.out.println("Boolean Comparison True");
        else
            System.out.println("Boolean Comparison False");
    }
    catch(NullPointerException ex)
    {
        System.out.println("Null Pointer Exception got while comparing Boolean values");
    }

    try
    {
        if(hi == "true")
            System.out.println("String Comparison True");
        else
            System.out.println("String Comparison False");
    }
    catch(NullPointerException ex)
    {
        System.out.println("Null Pointer Exception got while comparing String values");
    }
}

输出:

Null Pointer Exception got while comparing Boolean values
String Comparison False

共有1个答案

蒋正平
2023-03-14

因为在布尔值与布尔值进行比较的情况下,VM尝试取消变量的装箱(即尝试将布尔值变为布尔值)。如果此对象为null,则会得到一个NPE。在字符串上没有完成类似的操作,因此不会得到NPE。

 类似资料: