<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          2022年第一個線上問題,被領導罵慘了!

          共 1781字,需瀏覽 4分鐘

           ·

          2022-01-14 02:16

          昨天,一位朋友說他們生產(chǎn)環(huán)境出bug了,哎,年底了,今年的年終獎估計涼涼了!

          這位朋友剛剛出道不久,出了問題,第一時間找的我。

          他把出問題的代碼發(fā)我了,叫我?guī)退鹯eview這段代碼。

          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不一樣,數(shù)據(jù)有問題導致的?
          • 你這user_id是Integer類型?
          • 或者是orderItem.getProductOrderItem_order()不等null?

          我讓他debug看看,過一會,他說奇了怪了,并甩給我一個截圖:




          看到最后這張截圖,就不用想了,在判斷兩個user_id不相等的地方,我猜測IDEA編輯器已經(jīng)提示他了。兩邊都是Integer,屬于int的包裝類,也就是兩個Integer對象,你用!=去比較,這不是扯淡么?
          況且,人家IDEA編輯器會這么提示的:


          都明確提示使用equals()來做對象比較,假裝沒見,這鍋,沒人替你背了!
          使用IDEA編輯器開發(fā)的朋友,田哥建議你多看看IDEA給你的代碼提示

          問題來源

          暫且不討論他這代碼寫的很讓人不爽,怎么有的駝峰,有的下劃線?難道你們項目就沒有管這個嗎?讓你瞎寫,想干啥就干啥。我也問了,這位小伙伴是在一家小公司,在搞一個電商項目,由于急著上線,所以也沒顧忌到那么多。
          在此,也希望大家養(yǎng)成一個良好習慣,不要再這么編碼,對團隊負責也是對自己負責!
          這位小伙伴出的問題,根本原因在于使用!=沒有使用equals()導致的。
          故事還沒結(jié)算
          就算使用!=,在本地測試和測試環(huán)境,也都沒問題!


          自己本地測試,用戶數(shù)量就幾十個,測試環(huán)境也估計只有幾十個,但是線上就不止幾十個了,于是就這個bug就順利暴露出來了!
          最后,其實測試的小伙伴這會也要跟著背鍋!
          請看下面這段代碼,將輸出什么結(jié)果?

          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的知識盲區(qū),因為Integer對-128~127做了緩存。


          關于Integer的相關內(nèi)容,之前已跟大家分享給了。
          吊打面試官系列:說說Integer緩存范圍
          于是,上面的那段代碼輸出如下:

          true
          false
          false

          后記

          我們在對象比較的時候,一定記得使用equals來比較(有點開發(fā)經(jīng)驗的朋友都知道),但剛出道的朋友犯著錯也是可以理解的,也希望還不太清楚的朋友,往后別再給自己挖類似的坑了。
          吃一塹長一智!
          也希望這位朋友也別灰心,抽時間多補補基礎。?

          有道無術,術可成;有術無道,止于術

          歡迎大家關注Java之道公眾號


          好文章,我在看??

          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九色视频在线观看 | 美女骚逼 | 国产网站污 | 国内精品久久久久久久久鸭下载 | 中文无码99 |