2012-06-12 89 views
4

在我的代碼中有很多最終值,比如10000.它們從不改變,我什麼也不做,只是有時候會像if(number1 == number2)那樣檢查。使用int或Integer

使用intInteger這樣的數字會更好嗎?

+0

你將這些常量與「int」或「Integer」類型的變量進行比較嗎?如果將它們與「int」進行比較,則可以使用「int」作爲常量的類型來保存拆箱開銷。如果將它們與'Integer'對象進行比較,那麼首先你的例子不起作用,因爲'=='比較了兩個對象的引用。相反,你必須使用'equals()'來確保正在比較的值。 – adranale

回答

9

在你的情況下,使用int

在一般情況下,如果你的情況是,你可以切實請使用原始值幾乎總是首選:

  • 他們可能更多的內存高效
  • 您可以隨時使用==可靠,類Integer類型的情況並非如此 - 您必須使用.equals()才能確保獲得您想要的結果。有關更多詳細信息,請參閱here

這些日子內存需求是一個小問題,但大的問題是第二個問題,如果你不知道它會導致很多錯誤的可能性(尤其是因爲有案例其中==將按照您的預期工作,在其他情況下不會發生這種情況 - 這不是一個「可靠」的錯誤。)

3

使用int,因爲它是原始類型。它總是一個更好的選擇,因爲選擇原始類型而不是選擇完整的包裝對象的內存效率。

5

由於Integer s是對象,它們在內存中佔用更多空間。如果您從未使用Integer方法或任何其他要求它成爲對象的方法,則ints更具有內存效率,因爲int是原始類型。

在事物的宏偉計劃中,考慮到現代計算機有多少內存,這可能並不重要。雖然沒有傷害是安全的。

我應該注意到,如果您使用==代替Integer s,那麼您將檢查引用是否相同。對於Integer對象,將優選equals()方法。

2

如果它是intInteger並不重要。在java中,它們可以通過使用autoboxing進行互換。

但是,如果您打算將它們存儲在集合中,它們確實會有所作爲。集合只接受對象,這意味着您必須使用Integer

如果您決定使用Integer並想比較它們,請勿使用==。而應使用compareTo方法或equals方法。

2

您正在比較引用,所以最好使用int。 切勿使用「==」來比較Integer對象(或Float,Double,Short,Character,Byte,Long,BigDecimal ...)是否相等。比較數字的原始形式 - 即與int,short,long,double一起工作。

如果要比較整數使用方法compareTo()。

1

使用INT時,你可以當你必須使用整數:

如果值可以爲空使用Integer,但你將不得不使用的方法compareToEquals作出然後進行比較。

如果你的價值不能爲空,使用int,這樣你將有古典運營商==>=<等更可讀的代碼......

// int primitive, easy to handle 
int a = 5; 
int b = 5; 
int c = null; // Compile error, can't have null primitive values 
if(a == b) // True 
if(a > b) // False 
if(a >= b) // True 

// Integer, more complicated: 
Integer A = new Integer(5); 
Integer B = new Integer(5); 
Integer c = null; // Work 

if(A == B) // False, they are not the same objects 
if(A.equals(B)) // True, same value 

if(A > B) // Compile error... 
if(A.compareTo(B)>0) // A > B, the int version is more readable 
if(A.compareTo(B)>=0) // A >= B, the int version is more readable 
1

常量使用int與常量一樣,你只需要能夠獲得它們的價值。在這種情況下,Integer附帶的其他內容都是多餘的。

如果您需要將整數作爲參數傳遞,則可以使用Integer,因爲您可以獲得另一個參數值選項null(即具有無效參數的情況或合法的無值情況)。