4

在我的代码中有很多最终值,比如 10000。它们永远不会改变,我对它们什么都不做,只是有时会检查if(number1 == number2).

int使用或Integer这样的数字更好吗?

4

7 回答 7

8

在您的情况下,使用int.

在一般情况下,如果您处于可以可行地使用原始值几乎总是首选的情况:

  • 它们可能更节省内存
  • 您始终可以可靠地使用 ==,而类类型并非如此Integer- 您必须使用它.equals()来确保您得到了您想要的东西。有关更多详细信息,请参见此处

如今,内存需求已不再是一个问题,但最大的问题是第二个问题,如果您不知道它可能会导致很多错误(特别是因为有些情况下==会按您的预期工作) ,以及其他不会的 - 从这个意义上说,它不是一个“可靠”的错误。)

于 2012-06-12T14:13:35.697 回答
5

由于Integers 是对象,因此它们会占用更多内存空间。如果您从不使用Integer方法或其他任何需要它成为对象的东西,那么ints 的内存效率更高,因为int它是一种原始类型。

在宏伟的计划中,考虑到现代计算机有多少内存,这可能并不重要。不过安全无害。

我应该注意,如果您使用==for Integers,您正在检查引用是否相同。对于Integer对象,该equals()方法将是首选。

于 2012-06-12T14:13:28.200 回答
3

使用 int,因为它是原始类型。由于内存效率,选择原始类型而不是选择完整的包装对象始终是更好的选择。

于 2012-06-12T14:13:26.560 回答
2

int它是还是并不重要Integer。在 java 中,它们可以通过使用autoboxing来互换。

但是,如果您打算将它们存储在一个集合中,它确实会有所不同。集合只接受对象,这意味着您必须使用Integer.

如果您决定使用Integer并想比较它们,请不要使用==. 相反,使用compareTo方法或equals方法。

于 2012-06-12T14:15:05.150 回答
2

您正在比较参考,因此最好使用 int。切勿使用“==”来比较 Integer 对象(或 Float、Double、Short、Character、Byte、Long、BigDecimal...)是否相等。比较原始形式的数字——即使用 int、short、long、double。

如果要比较整数,请使用方法 compareTo()。

于 2012-06-12T14:18:02.253 回答
1

可以使用int ,必须使用 Integer

如果这些值可以为空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
于 2012-06-12T14:27:40.053 回答
1

对于常量使用int,与常量一样,您只需要能够获取它们的值。在这种情况下,所有其他附带的东西Integer都是多余的。

在您需要将整数作为参数传递的情况下,使用它会很方便,Integer因为您可以获得参数值的另一个选项null(即具有无效参数的情况,或合法的无值情况)。

于 2012-06-12T14:29:50.880 回答