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)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 廊坊市| 罗田县| 韶山市| 清新县| 建昌县| 武山县| 浠水县| 岳池县| 孝义市| 婺源县| 岳阳市| 杂多县| 库车县| 左权县| 汾西县| 辽宁省| 仙居县| 沽源县| 繁峙县| 兴义市| 泰和县| 阳泉市| 松潘县| 昆山市| 宜兴市| 辽中县| 新兴县| 哈尔滨市| 云阳县| 江西省| 鄂尔多斯市| 巴彦淖尔市| 遵义市| 循化| 呼伦贝尔市| 灵山县| 绥阳县| 彰化市| 通河县| 湖州市| 福清市|