if (fs!=null&&fs.getId()>0)和if (fs!=null)的区别

今天出现一个错误,花了我3个小时,最后发现错在了这:敲打

if (fs!=null&&fs.getId()>0)和if (fs!=null)的区别:

这样会出错:不会执行if-else的代码

/**
 * 关注用户
 * @param follow
 * @return
 */
@RequestMapping(value = "/followUser",produces="text/html;charset=UTF-8;")
@ResponseBody
public String followUser(Follow follow){
    System.out.println("关注用户:"+follow.toString());
    //查询用户是否已经关注
    Follow fs=followService.findFollow(follow);
    String result=null;
    //如果已经关注,点击变为取消关注,删除记录
    if (fs!=null&&fs.getId()>0){
        System.out.println("已经关注:");
        followService.deleteFollow(fs.getId());
        result="关注";
    }else{
        //没有关注,直接添加关注记录
        System.out.println("没有关注:");
        followService.insertFollow(follow);
        result="已关注";
    }
    return ""+result;
}

但把改成:就不会出错,代码可以根据if-else情况执行

 if (fs!=null){
        System.out.println("已经关注:");
        followService.deleteFollow(fs.getId());
        result="关注";
    }else{
        //没有关注,直接添加关注记录
        System.out.println("没有关注:");
        followService.insertFollow(follow);
        result="已关注";
    }

原因是:对象不为null不是所有属性都有值,而是至少有一个属性有值,所以fs不为null,但fs的id为null呢,这样getid()就会报空指针了。又由于id是数据库设置为主键,不允许为null的,所以即使

Follow fs=followService.findFollow(follow);

没有值,是不是返回的对象都不是null呢,但对象且没有值。

Why:为什么我会花了3个小时,才发现这个问题呢?

是因为:这个没错。

/**
 * 处理用户点赞行为
 * @param niceDetail
 * @return
 */
@RequestMapping("/niceDetail")
@ResponseBody
public String niceDetail(NiceDetail niceDetail ){
    System.out.println("点赞模块:"+niceDetail.toString());
    //查询是否有该用户的点赞记录
    NiceDetail niceDetail1=niceDetailService.findNiceDetail(niceDetail);
    int result=0;
    if (niceDetail1!=null&&niceDetail1.getContentId()>0){
        System.out.println("有该记录");
        //如果找到这条记录,删除该记录,同时文章的点赞数减一
        //删除记录
        niceDetailService.deleteNiceDetail(niceDetail1.getId());
        //根据点赞id找到文章
        Content content=contentService.selectContent(niceDetail1.getContentid());
        //文章点赞数减一
        content.setNice(content.getNice()-1);
        result=content.getNice();
        System.out.println("res:"+result);
        //更新文章点赞数
        contentService.updateContent(content);
    }else{
        //如果没有找到这条记录,则添加这条记录,同时文章数加一;
        //添加记录
        System.out.println("没有记录:");
        niceDetailService.insertNiceDetail(niceDetail);
        Content content=contentService.selectContent(niceDetail.getContentid());
        //文章点赞数加一
        content.setNice(content.getNice()+1);
        result=content.getNice();
        System.out.println("res:"+result);
        //更新文章点赞数
        contentService.updateContent(content);
    }
    return ""+result;
}
那为什么这个
 if (niceDetail1!=null&&niceDetail1.getContentId()>0)

就不报错呢?

现在看来:1.可能是当初数据库本身有值,所以返回的对象是真的有值,2.是该表的contentId不是主键,所以其没有不允许为null,而且是int型,所以可能if出错,也会执行else.

所以最后发现自己之所以花了3个小时是因为被这个给坑住了,之前排错就没往这方面去想,而且有了成功运行的案例,就本能的觉得没有错啊,所以一般只认为是数据传不到,mapper写错sql,结果是if语句出的错。

所以总结:不要被自己挖的坑坑了,要细心,要跳出框,不要给自己挖坑,逻辑要严密点。

我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

猜你喜欢

转载自blog.csdn.net/weixin_39220472/article/details/80296011
fs