天天看點

Java基本類型與對象類型的差別導緻的Bug剖析

本文中所提到的基本類型是指類似 int,long等,而對象類型是指Integer,Long等。

  基本類型和對象類型第一個最大的不同在于初始化的值不同。int 初始化為0,Integer 為null。在一個線上産品故障的排查過程中發現根本原因在于開發同學把資料庫DO對象的一個字段從int 改成了Integer引起的,因為int 類型可以正常的初始化,而Integer 對象的時候不能正常插入,導緻了線上産品故障。

  正是由于初始化的值的不同,也導緻了在進行邏輯比較的時候,對象類型很容易出現空指針異常:

  基本類型可以直接進行邏輯判斷:

int num;

if( num >0 ){

//todo

}

  這樣的代碼不會有空指針的異常,但是如果是如下代碼:

Integer num;

  例如:

public class MyTest {

@Autowired     private HttpServletResponse response;

public void execute(@Param("pageSize") Integer pageSize) throws Exception {

//這裡容易空指針異常

if( pageSize<=0 ){

pageSize = 1;

  第二個不同在于基本類型沒有可執行的方法,而對象類型支援很多封裝的方法,例如Integer 對象 可以使用toString()的方法。

  第三個不同在于基本類型不能作為List或者Map的類型,例如:

  List<int>  numList = new ArrayList<int>();  //這樣是不可以的。

最新内容請見作者的GitHub頁:http://qaseven.github.io/