2022年第一个线上问题,被领导骂惨了!
昨天,一位朋友說他們生產環境出bug了,哎,年底了,今年的年終獎估計涼涼了!
這位朋友剛剛出道不久,出了問題,第一時間找的我。
他把出問題的代碼發我了,叫我幫他review這段代碼。
for?(ProductOrderItem?orderItem?:?orderItemList)?{if?(orderItem.getProductOrderItem_user().getUser_id()?!=?user.getUser_id())?{logger.warn("用戶訂單項與用戶不匹配,回到購物車頁");return?"redirect:/cart";}if?(orderItem.getProductOrderItem_order()?!=?null)?{logger.warn("用戶訂單項不屬于購物車,回到購物車頁");return?"redirect:/cart";} }看這段代碼,不是很簡單嗎?
我只能盲猜了
是不是兩個user_id不一樣,數據有問題導致的?
你這user_id是Integer類型?
或者是orderItem.getProductOrderItem_order()不等null?
我讓他debug看看,過一會,他說奇了怪了,并甩給我一個截圖:
看到最后這張截圖,就不用想了,在判斷兩個user_id不相等的地方,我猜測IDEA編輯器已經提示他了。兩邊都是Integer,屬于int的包裝類,也就是兩個Integer對象,你用!=去比較,這不是扯淡么?
況且,人家IDEA編輯器會這么提示的:
都明確提示使用equals()來做對象比較,假裝沒見,這鍋,沒人替你背了!
使用IDEA編輯器開發的朋友,田哥建議你多看看IDEA給你的代碼提示
問題來源
暫且不討論他這代碼寫的很讓人不爽,怎么有的駝峰,有的下劃線?難道你們項目就沒有管這個嗎?讓你瞎寫,想干啥就干啥。我也問了,這位小伙伴是在一家小公司,在搞一個電商項目,由于急著上線,所以也沒顧忌到那么多。
在此,也希望大家養成一個良好習慣,不要再這么編碼,對團隊負責也是對自己負責!
這位小伙伴出的問題,根本原因在于使用!=沒有使用equals()導致的。
故事還沒結算
就算使用!=,在本地測試和測試環境,也都沒問題!
自己本地測試,用戶數量就幾十個,測試環境也估計只有幾十個,但是線上就不止幾十個了,于是就這個bug就順利暴露出來了!
最后,其實測試的小伙伴這會也要跟著背鍋!
請看下面這段代碼,將輸出什么結果?
public?class?Test?{public?static?void?main(String[]?args)?{Integer?aa=100;Integer?bb=100;System.out.println(aa==bb);Integer?cc=128;Integer?dd=128;System.out.println(cc==dd);Integer?ee=129;Integer?ff=129;System.out.println(ee==ff);} }這又聊到了Integer的知識盲區,因為Integer對-128~127做了緩存。
關于Integer的相關內容,之前已跟大家分享給了。
吊打面試官系列:說說Integer緩存范圍
于是,上面的那段代碼輸出如下:
true false false后記
我們在對象比較的時候,一定記得使用equals來比較(有點開發經驗的朋友都知道),但剛出道的朋友犯著錯也是可以理解的,也希望還不太清楚的朋友,往后別再給自己挖類似的坑了。
吃一塹長一智!
也希望這位朋友也別灰心,抽時間多補補基礎。?
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
總結
以上是生活随笔為你收集整理的2022年第一个线上问题,被领导骂惨了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蘑菇街撸掉80%研发岗,产品竟然裁到只剩
- 下一篇: 干掉项目中杂乱的 if-else,试试状