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 閱讀(139) 評論(0)  編輯  收藏


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


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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 霍山县| 卓尼县| 锦州市| 滨州市| 永仁县| 岳普湖县| 嵊州市| 贡嘎县| 景泰县| 佛山市| 临武县| 新化县| 徐汇区| 武陟县| 安多县| 乐清市| 南通市| 北宁市| 连云港市| 永川市| 稻城县| 罗江县| 武川县| 和平县| 宝丰县| 静乐县| 商丘市| 武冈市| 赞皇县| 衢州市| 普兰县| 西吉县| 赣州市| 吴忠市| 收藏| 年辖:市辖区| 建平县| 屏南县| 崇义县| 韶山市| 台中市|