把一個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>函數