第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

記一次判斷值是否存在遇到的神奇問題

標簽:
Java

前言

最近朋友说遇到一个无解的bug,他有个业务需求是VIP用户才能参与活动的业务场景。他判断vip的伪代码形如下

private boolean isVip(UserDTO userDTO){
        List<Integer> vipUserIds = userService.vipUserIds();
        for (Integer vipUserId : vipUserIds) {
            if(vipUserId.equals(userDTO.getUserId())){
                return true;
            }
        }


        return false;
    }

他传了一个userId为10000(注:10000为示例数据)的vip用户,结果发现这个判断一直是false。于是就找到我帮他看下,这代码看着没啥问题,我就让他先确认一下数据库是否存在这个vip用户,朋友非常肯定的说存在的。

排查

因为朋友确定数据库存在这条记录,后面我就让他判断vip的逻辑上加下日志,改后的伪代码如下

private boolean isVip(UserDTO userDTO){
        List<Integer> vipUserIds = userService.vipUserIds();
        for (Integer vipUserId : vipUserIds) {
            if(vipUserId.equals(userDTO.getUserId())){
                return true;
            }
        }

        log.warn("userId-->{} is not in vipList-->{}",userDTO.getUserId(),vipUserIds);

        return false;
    }

然后日志神奇的出现

当看到这条日志,我就有点懵逼了。后面朋友跟我说他怀疑是JDK版本有问题,但我的第六感告诉这不至于。

多年写bug经验告诉我,啥都会骗人,只有源码不会骗人。因为判断是否vip的代码就一句equal,直接点进去了事。这equal的源码如下

   public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

看到这个代码后,我想有些老司机应该有点感觉。后面我就跟朋友说你有没有可能类型写错了,你的userId类型是Integer吗?于是他翻一下代码,果然他userId的类型写成String

修复

后面朋友把userId的类型也改成Integer,问题圆满解决。

总结

有时候有些bug难以解决,并不是因为遇到技术难题,而是因为一些我们平时没注意的小细节引起

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消