将会话属性与null进行比较

时间:2015-01-03 16:26:15

标签: java

这是我的Login.jsp页面,我有一个名为LoginSuccessfull的字符串变量来确定该用户是否成功登录。

我知道这个变量返回null但我无法通过if条件识别出来:

String LoginSuccessfull = String.valueOf(session.getAttribute("LoginSuccessfull"));
if (LoginSuccessfull==null || LoginSuccessfull.equalsIgnoreCase("Yes")) {
     //Print something
} else {
      //print something
}

我得到了NullPointerException。 有什么问题?

2 个答案:

答案 0 :(得分:1)

String.valueOf((Object)null)将返回"null"而不是null。最好完全跳过这个转换(是字符串还是布尔值?)。

如果要保留转换,请先检查空值,或者与“null”进行比较。

Object loginFlag = session.getAttribute(FLAG);
if (loginFlag != null)
{
   String loginFlagStr = String.valueOf(loginFlag);
   if ("Yes".equalsIgnoreCase(loginFlagStr))
   {
     // yes
   } else {
     // not yes
   }
} else {
  // null
}

顺便说一句:目前还不清楚代码中的NullPointerException。我怀疑在你的情况下,唯一的地方可能是session null。您没有显示代码的这一部分。 (如果你使用getSession(false),可能会发生这种情况。)

答案 1 :(得分:0)

如果会话属性" LoginSuccessfull"如果不存在则您的语句String LoginSuccessfull = String.valueOf(session.getAttribute("LoginSuccessfull"));将获得NullPointerException因为您尝试将null传递给String.valueOf方法。这样,你的进一步检查和代码都不会被执行。

相反,你可以做类似的事情:

Object LoginSuccessfull = session.getAttribute("LoginSuccessfull");
if (LoginSuccessfull!=null && ((String)LoginSuccessfull).equalsIgnoreCase("Yes")){
// do something
}