比较两个字符串会给出java.lang.NullPointerException

时间:2017-10-03 14:40:24

标签: java

我正在尝试从HTML帖子获取复选框值。我的问题是帖子返回on or null而不是true or false,因此我需要将其转换为true以将其插入数据库中。

 Boolean hasProfile7 = Boolean.valueOf(request.getParameter("hasProfile7"))

hasProfile7即使在“on”

时也是假的
 Boolean hasProfile7 = (request.getParameter("hasProfile7").equals("on")) ? true : false;

如果没有选中复选框(false)

,这会导致我的应用程序崩溃java.lang.NullPointerException
 Boolean hasProfile7 = (request.getParameter("hasProfile7") == "on") ? true : false;

这让我总是假的。

我该怎么办?我只是希望bool在“on”时为True,在“null”时为false

2 个答案:

答案 0 :(得分:3)

这是将常量与String进行比较的空安全方法:

"some-value".equals(variable) // ok

如果variable为空,则以下代码段将抛出空指针异常,因为您不允许在空值上调用equals方法:

variable.equals("some-value") // not recomended

如果值包含" on"此方法将返回true,否则将返回false:

public boolean isChecked(final String value) {
    if (Objects.isNull(value)) {
        return false;
    }

    if ("on".equals(value.toLowerCase())) {
        return true;
    }

    return false;
}

答案 1 :(得分:1)

第一点

Boolean hasProfile7 = Boolean.valueOf(request.getParameter("hasProfile7"))

你在做什么

Boolean.valueOf(<A String>)

根据https://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html#valueOf(java.lang.String) public static Boolean valueOf(String s)“返回一个带有由指定字符串表示的值的布尔值。返回的布尔值表示如果字符串参数不为null且等于忽略大小写,则表示字符串”true“的真值。”

第二点

Boolean hasProfile7 = (request.getParameter("hasProfile7").equals("on")) ? true : false;

在这里你很接近要做的事情。您的问题是request.getParameter("hasProfile7")返回 null ,因此您拥有*null*.equals("on"),这就是您获得NPE的原因。

如果您有预定义的字符串,请始终将其放在左侧大小:

Boolean hasProfile7 = ("on".equals(request.getParameter("hasProfile7"))) ? true : false;

在这里,即使request.getParameter("hasProfile7")为空,您也有任何异常,它只会返回 false

第三点

 Boolean hasProfile7 = (request.getParameter("hasProfile7") == "on") ? true : false;

您要将对象"on"与对象request.getParameter("hasProfile7")进行比较。如果值相同,则对象不是。

最后一点,为什么要使用三元表达式(request.getParameter("hasProfile7").equals("on")) ? true : false; 可以翻译成

if true --> true 
if false --> false

你可以写

Boolean hasProfile7 = "on".equals(request.getParameter("hasProfile7"))