2016-03-08 94 views
0

這可能會打破討論與答案的規則,但我認爲有一個首選的做事方式。將原始數據類型轉換爲對象時,您應該轉換還是創建一個新對象?

-

比方說,你需要一個基本數據類型轉換爲對象。我們以int --> Integer爲例。你可以通過投射或直接製作一個新的物體來達到這個目的。例如:

int a = 5; int b = 10; 
Integer c = new Integer(a); 
Integer d = (Integer) b; 

哪個是更好的方式來做到這一點,a --> cb --> d?我懷疑他們執行相同的操作,所以通常使用哪一個?

在此先感謝。

+0

取決於它的使用方式。大多數情況下,我只要在需要'Integer'的地方使用'int'並讓Java自動對其進行設置。 – gla3dr

+1

都不是。閱讀關於Java中的自動裝箱。 –

+4

你既不需要演員也不需要新人。 '整數foo = 3;' – pvg

回答

1

以上都不是。 使用Integer.valueOf,因爲通過緩存頻繁請求的值可以顯着改善空間和時間性能。

Integer.valueOf

的文檔返回表示指定 {@code INT}值的{@code整數}實例。如果需要新的實例不是 ,則通常應優先使用此方法,而不是構造函數{@link #Integer(int)},因爲此方法可能爲 以產生顯着更好的空間和時間性能通過 緩存頻繁請求的值。

但與autoboxing,編譯器會自動爲你做。

Integer i = 1; 

哪一項是

Integer i = Integer.valueOf(1); 
0

無上述的語法糖。在這種情況下,您可以依靠autoboxing來照顧演員。

這將使你的代碼是:

int a = 5; 
int b = 10; 
Integer c = a; 
Integer d = b; 
1

比方說,你需要一個基本數據類型轉換爲對象。 我們以int - > Integer爲例。你可以通過鑄造或直接製作一個新的物體來達到這個目的。例如:

int a = 5; int b = 10; 
Integer c = new Integer(a); 
Integer d = (Integer) b; 

哪個是更好的方式來做到這一點,一個 - > C或B - > d?我懷疑他們 執行相同的操作,所以通常使用哪一個?在版本5

Java編譯,以後再執行自動裝箱爲原始值之間進行轉換和它對應裝箱對象。自動裝箱模糊,但不抹去原始值和對象之間的區別。

下面的行氣餒:

Integer c = new Integer(a); 

這是因爲新的對象總是創建並防止被重複使用高速緩存的整數對象。

此行是由Java編譯器轉換:

Integer d = (Integer) b; 

相反,該行成爲

Integer d = Integer.valueOf(b); 

這是,如果你完全省略從分配中投,你會得到的代碼。使用valueOf()函數將原始值裝箱到相應的對象中。這是將原始值分配給其對象的首選方式,因爲這允許JVM重複使用經常緩存的對象。