-1

我正在尝试通过检查会话中是否存储值来检查用户是否已登录:

String userId = null;
if(session.getAttribute("user_id")!=null){
    userId=(String)session.getAttribute("user_id");
}

if(userId!=null||!userId.isEmpty()){
    //do something
}

但是我在这一行收到 NullPointerException:if(userId!=null||!userId.isEmpty())当用户未登录时。

4

3 回答 3

3

你的逻辑不正确;您需要&&(logical-and) 而不是||(logical-or) 来正确地短路您的条件。

if(userId!=null && !userId.isEmpty()){

这样,userId.isEmpty()不会被执行NullPointerException——如果userId为空,也不会抛出——。

于 2013-07-26T19:12:21.553 回答
3

您需要使用&&

if (userId!=null && !userId.isEmpty()) {

如果您使用||了 ,那么 Java 无论如何都会评估这两个条件,而不管任一表达式的真值如何。因此,如果您使用||了 ,那么即使userId为 null,Java 也会继续尝试评估!userId.isEmpty(),从而为您提供NullPointerException.

通过使用&&,如果第一个条件为假,则 Java 知道表达式已经为假,并且没有继续进行的意义。所以在这种情况下,如果userId为空,userId!=null则为假,Java 会跳过if语句的主体。

于 2013-07-26T19:13:07.627 回答
0

尝试这个

    if( session.isOpened())
    {
      if(user!=null)
       {
         //do here whatever
       }
    }
于 2013-07-26T19:15:03.323 回答