天天看點

Integer.parseInt("") Integer.valueOf("")和new Integer("")之間的差別

把一個string轉換成int有<code>integer.parseint("")</code>、 <code>integer.valueof("")</code>和<code>new integer("")</code>這麼幾種方式,它們之間有什麼差別呢?我們可以分别看一下它們的源碼

從源碼中可以看出,<code>integer.valueof("")</code>和<code>integer.parseint("")</code>内部實作是一樣的,它們之間唯一的差別就是integer.valueof(“”)傳回的是一個integer對象,而integer.parseint(“”)傳回的是一個基本類型的int。

我們再看<code>integer.valueof("")</code>和<code>new integer("")</code>,它們同樣傳回的是一個integer對象,但它們又有什麼差別呢?我們再進入<code>integer.valueof(parseint(s, 10) )</code>方法内部:

我們可以看到,<code>integer.valueof("")</code>會用到<code>integercache</code>對象,當<code>integercache</code>中存在時就從cache中取,不存在時才會調用<code>new integer(i)</code>構造函數傳回一個integer對象。是以<code>integer.valueof("")</code>會用到cache,其效率可能會比用構造函數<code>new integer(i)</code>高。

關于<code>integercache</code>,在-127~128之間的值都會被cache,是以當我們要的值位于這個區間時傳回的都是同一個執行個體,例如:

上面程式的運作結果是:

綜上所述:

當我們需要的是一個基本類型* int *的時候我們需要使用<code>integer.parseint()</code>函數

當我們需要的是一個integer對象類的時候我們就是用<code>integer.valueof()</code>函數

繼續閱讀