在我的代码中有很多最终值,比如 10000。它们永远不会改变,我对它们什么都不做,只是有时会检查if(number1 == number2)
.
int
使用或Integer
这样的数字更好吗?
在您的情况下,使用int
.
在一般情况下,如果您处于可以可行地使用原始值几乎总是首选的情况:
Integer
- 您必须使用它.equals()
来确保您得到了您想要的东西。有关更多详细信息,请参见此处。如今,内存需求已不再是一个问题,但最大的问题是第二个问题,如果您不知道它可能会导致很多错误(特别是因为有些情况下==
会按您的预期工作) ,以及其他不会的 - 从这个意义上说,它不是一个“可靠”的错误。)
由于Integer
s 是对象,因此它们会占用更多内存空间。如果您从不使用Integer
方法或其他任何需要它成为对象的东西,那么int
s 的内存效率更高,因为int
它是一种原始类型。
在宏伟的计划中,考虑到现代计算机有多少内存,这可能并不重要。不过安全无害。
我应该注意,如果您使用==
for Integer
s,您正在检查引用是否相同。对于Integer
对象,该equals()
方法将是首选。
使用 int,因为它是原始类型。由于内存效率,选择原始类型而不是选择完整的包装对象始终是更好的选择。
int
它是还是并不重要Integer
。在 java 中,它们可以通过使用autoboxing来互换。
但是,如果您打算将它们存储在一个集合中,它确实会有所不同。集合只接受对象,这意味着您必须使用Integer
.
如果您决定使用Integer
并想比较它们,请不要使用==
. 相反,使用compareTo
方法或equals
方法。
您正在比较参考,因此最好使用 int。切勿使用“==”来比较 Integer 对象(或 Float、Double、Short、Character、Byte、Long、BigDecimal...)是否相等。比较原始形式的数字——即使用 int、short、long、double。
如果要比较整数,请使用方法 compareTo()。
可以使用int ,必须使用 Integer:
如果这些值可以为空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
(即具有无效参数的情况,或合法的无值情况)。