在我的代码中有很多最终值,比如10000.它们永远不会改变,我对它们什么都不做,有时像if(number1 == number2)
那样检查。
对这些数字使用int
或Integer
是否更好?
答案 0 :(得分:9)
在您的情况下,请使用int
。
在一般情况下,如果您处于可行使用的情况,则原始值几乎总是首选:
Integer
类型的情况 - 您必须使用.equals()
来确保获得所需内容。有关详细信息,请参阅here。现在内存需求不是一个问题,但是最重要的问题是第二个,如果你不了解它,可能会导致很多错误(特别是因为有{{{ 1}}会像你期望的那样工作,而其他地方也不会工作 - 从那个意义上说它不是一个“可靠”的bug。)
答案 1 :(得分:5)
由于Integer
是对象,因此它们在内存中占用更多空间。如果您没有使用Integer
方法或其他任何需要它的对象,int
的内存效率更高,因为int
是基本类型。
在宏观计划中,鉴于现代计算机具有多少内存,这可能无关紧要。尽管如此,没有危害。
我应该注意,如果您对==
使用Integer
,则会检查引用是否相同。对于Integer
个对象,首选equals()
方法。
答案 2 :(得分:3)
使用int,因为它是原始类型。由于内存效率选择基本类型而不是选择完整的包装对象,因此总是更好的选择。
答案 3 :(得分:2)
如果它是int
或Integer
并不重要。在java中,通过使用autoboxing,它们可以互换。
如果您计划将它们存储在集合中,它确实会有所不同。集合只接受对象,这意味着您必须使用Integer
。
如果您决定使用Integer
并希望对其进行比较,请不要使用==
。相反,请使用compareTo
方法或equals
方法。
答案 4 :(得分:2)
您正在比较引用,因此最好使用int。 切勿使用“==”来比较Integer对象(或Float,Double,Short,Character,Byte,Long,BigDecimal ......)的相等性。比较原始形式的数字 - 即使用int,short,long,double。
如果要比较整数使用方法compareTo()。
答案 5 :(得分:1)
尽可能使用 int并在必要时使用Integer :
如果值为null,请使用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
答案 6 :(得分:1)
对于常量使用int
,与常量一样,您只需要能够获得它们的值。在这种情况下,Integer
附带的所有其他内容都是多余的。
在需要将整数作为参数传递的情况下,使用Integer
会很方便,因为您可以获得参数值为null
的另一个选项(即参数无效的情况或合法的否则 - 值案例。)