qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java基本類型與對象類型的區別導致的Bug剖析

          本文中所提到的基本類型是指類似 int,long等,而對象類型是指Integer,Long等。
            基本類型和對象類型第一個最大的不同在于初始化的值不同。int 初始化為0,Integer 為null。在一個線上產品故障的排查過程中發現根本原因在于開發同學把數據庫DO對象的一個字段從int 改成了Integer引起的,因為int 類型可以正常的初始化,而Integer 對象的時候不能正常插入,導致了線上產品故障。
            正是由于初始化的值的不同,也導致了在進行邏輯比較的時候,對象類型很容易出現空指針異常:
            基本類型可以直接進行邏輯判斷:
          int num;
          if( num >0 ){
          //todo
          }
            這樣的代碼不會有空指針的異常,但是如果是如下代碼:
          Integer num;
          if( num >0 ){
          //todo
          }
            就會有空指針異常。這種異常特別容易出現在web的參數處理上:
            例如:
          public class MyTest {
          @Autowired     private HttpServletResponse response;
          public void execute(@Param("pageSize") Integer pageSize) throws Exception {
          //todo
          //這里容易空指針異常
          if( pageSize<=0 ){
          pageSize = 1;
          }
          //todo
          }
          }
            第二個不同在于基本類型沒有可執行的方法,而對象類型支持很多封裝的方法,例如Integer 對象 可以使用toString()的方法。
            第三個不同在于基本類型不能作為List或者Map的類型,例如:
            List<int>  numList = new ArrayList<int>();  //這樣是不可以的。

          posted on 2014-07-15 10:10 順其自然EVO 閱讀(142) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 肇东市| 靖远县| 岑溪市| 安国市| 保亭| 陆河县| 延安市| 平顶山市| 贵溪市| 白水县| 湟源县| 烟台市| 新邵县| 丹棱县| 息烽县| 门源| 竹北市| 葵青区| 库车县| 长顺县| 丁青县| 昌宁县| 揭西县| 灌云县| 长子县| 都江堰市| 苍溪县| 姜堰市| 道真| 南丰县| 香港| 洛南县| 宜黄县| 安龙县| 东辽县| 上杭县| 金堂县| 镇远县| 台中县| 福海县| 松原市|