我试图通过检查会话中是否存储了值来检查用户是否已登录:
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())
当用户没有登录时。
答案 0 :(得分:3)
你的逻辑错误;你需要&&
(逻辑 - 和)而不是||
(逻辑 - 或)来正确地缩短你的状况。
if(userId!=null && !userId.isEmpty()){
这样,userId.isEmpty()
将不会执行 - 如果NullPointerException
为空,则不会抛出userId
。
答案 1 :(得分:3)
您需要使用&&
:
if (userId!=null && !userId.isEmpty()) {
如果您使用||
,那么无论如何,Java都将评估这两个条件,而不管任一表达式的真值。因此,如果您使用||
,那么即使userId
为空,Java也会继续尝试评估!userId.isEmpty()
,这会为您提供NullPointerException
。
通过使用&&
,如果第一个条件为false,则Java知道表达式已经为假,并且没有任何意义继续进行。因此,在这种情况下,如果userId
为null,则userId!=null
为false,并且Java会跳过if
语句的主体。
答案 2 :(得分:0)
试试这个
if( session.isOpened())
{
if(user!=null)
{
//do here whatever
}
}