在我的代碼中有很多最終值,比如10000.它們從不改變,我什麼也不做,只是有時候會像if(number1 == number2)
那樣檢查。使用int或Integer
使用int
或Integer
這樣的數字會更好嗎?
在我的代碼中有很多最終值,比如10000.它們從不改變,我什麼也不做,只是有時候會像if(number1 == number2)
那樣檢查。使用int或Integer
使用int
或Integer
這樣的數字會更好嗎?
在你的情況下,使用int
。
在一般情況下,如果你的情況是,你可以切實請使用原始值幾乎總是首選:
Integer
類型的情況並非如此 - 您必須使用.equals()
才能確保獲得您想要的結果。有關更多詳細信息,請參閱here。這些日子內存需求是一個小問題,但大的問題是第二個問題,如果你不知道它會導致很多錯誤的可能性(尤其是因爲有案例其中==
將按照您的預期工作,在其他情況下不會發生這種情況 - 這不是一個「可靠」的錯誤。)
使用int,因爲它是原始類型。它總是一個更好的選擇,因爲選擇原始類型而不是選擇完整的包裝對象的內存效率。
由於Integer
s是對象,它們在內存中佔用更多空間。如果您從未使用Integer
方法或任何其他要求它成爲對象的方法,則int
s更具有內存效率,因爲int
是原始類型。
在事物的宏偉計劃中,考慮到現代計算機有多少內存,這可能並不重要。雖然沒有傷害是安全的。
我應該注意到,如果您使用==
代替Integer
s,那麼您將檢查引用是否相同。對於Integer
對象,將優選equals()
方法。
如果它是int
或Integer
並不重要。在java中,它們可以通過使用autoboxing進行互換。
但是,如果您打算將它們存儲在集合中,它們確實會有所作爲。集合只接受對象,這意味着您必須使用Integer
。
如果您決定使用Integer
並想比較它們,請勿使用==
。而應使用compareTo
方法或equals
方法。
您正在比較引用,所以最好使用int。 切勿使用「==」來比較Integer對象(或Float,Double,Short,Character,Byte,Long,BigDecimal ...)是否相等。比較數字的原始形式 - 即與int,short,long,double一起工作。
如果要比較整數使用方法compareTo()。
使用INT時,你可以當你必須使用整數:
如果值可以爲空使用Integer
,但你將不得不使用的方法compareTo
和Equals
作出然後進行比較。
如果你的價值不能爲空,使用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
常量使用int
與常量一樣,你只需要能夠獲得它們的價值。在這種情況下,Integer
附帶的其他內容都是多餘的。
如果您需要將整數作爲參數傳遞,則可以使用Integer
,因爲您可以獲得另一個參數值選項null
(即具有無效參數的情況或合法的無值情況)。
你將這些常量與「int」或「Integer」類型的變量進行比較嗎?如果將它們與「int」進行比較,則可以使用「int」作爲常量的類型來保存拆箱開銷。如果將它們與'Integer'對象進行比較,那麼首先你的例子不起作用,因爲'=='比較了兩個對象的引用。相反,你必須使用'equals()'來確保正在比較的值。 – adranale