2013-01-23 116 views
4

鑑於字符串s已宣佈,以下5行代碼產生同樣的結果:轉換和爲int

int i = Integer.valueOf(s); 
int y = Integer.parseInt(s); 
int j = Integer.valueOf(s).intValue(); 
Integer x = Integer.valueOf(s); 
Integer k = Integer.valueOf(s).intValue(); 

是否有情況,其中每個人都成爲首選的代碼?看起來intInteger是可以互換的,並且.intValue()是不需要的。

+2

相關:http://stackoverflow.com/questions/13933287/which-one-is-faster-integer-valueofstring-string-or-integer-parseintstring-s – assylias

+0

你打算如何使用分配後的變量?你可能不需要Integer – Dan

+3

'Integer z = Integer.parseInt(s);'也可以。 – assylias

回答

7

如果您需要int,使用parseInt(),如果你需要使用IntegervalueOf()。儘管它們現在可以互換,但使用直接返回所需數據類型的方法仍然更合理。 (從歷史上看,他們是不可替換的所有,這與自動裝箱引入並在Java 5中拆箱)

intValue()方法您所使用的只是Integer類類型轉換爲int原始,因此使用該和valueOf()是最糟糕的可能組合,你永遠不想使用它。 (沒有什麼不好的事情發生,只是閱讀時間更長,表現稍差,而且通常更加多餘。)

如果你不在乎或不知道,那麼我會用parseInt()。特別是作爲初學者,你更想要的是原始類型而不是類類型。

+0

我正在使用的文本將parseInt()和valueOf方法一起引入,並在文本後面介紹包裝器類型。謝謝。 - 尼克 – Nick

3

intInteger被看作是可以通過自動裝箱和自動拆箱的魔術互換的:在很多情況下,如果你需要一個但有另一個,編譯器將自動插入必要的代碼來轉換它們。

這很有用,但如果您瞭解它,可以在許多地方避免它,從而導致代碼稍微快一些(因爲轉換的次數少)。

  • Integer.parseInt()返回int,因此如果您需要一個int
  • Integer.valueOf()返回Integer應該使用它,所以如果你需要一個Integer
  • Integer.valueOf().intValue()第一創建你應該使用它的Integer然後從中提取int的值。沒有很好的理由使用這個,而不是簡單的Integer.parseInt()

intInteger之間的決定是很容易做的一樣好:

  • 一般你想使用基本類型(int),如果可能的話
  • ,如果您需要Object(例如,如果你想把你的號碼放在Collection),那麼你需要使用包裝類型(Integer),因爲在這裏不能使用原始類型。
+0

SUPER解釋!我還沒有收藏和包裝類型。我正在使用的文本將parseInt()和valueOf方法一起引入,並在文本後面介紹包裝器類型。謝謝。 – Nick

0

int和整數並不自動裝箱功能弗朗了Java 5 JVM起,INT到整數的轉換是照顧itself.But我們不應該使用Integer類的不必要interchangeable.Because。原始數據類型總是更快。應只使用包裝類。

+1

其實autoboxing/unboxing是一個編譯器的東西。 JVM本身不知道它。 –

+0

我的意思是編譯器實際上..無論如何謝謝約阿希姆紹爾先生 – Renjith