【问题标题】:Using int vs Integer使用 int 与 Integer
【发布时间】:2012-05-24 07:39:46
【问题描述】:

我遇到了一个类,它使用整数变量来捕获要在 for 循环中使用的大小。这是一种好的做法还是我们应该使用 int 原始数据类型?

Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j) 

【问题讨论】:

  • 可能重复:int or Integer
  • 提供了 Integer 类,以便可以以纯 OO 方式对值进行装箱/拆箱。在适当的地方使用 int ,除非您特别需要以 OO 方式使用它;在这种情况下,整数是合适的。
  • int or Integer的可能重复

标签: java integer int primitive


【解决方案1】:

提供了 Integer 类,以便可以以纯 OO 方式对值进行装箱/拆箱。在适当的地方使用 int ,除非您特别需要以 OO 方式使用它;在这种情况下,整数是合适的。

Java Int vs Integer

然而,这里的幕后却发生了截然不同的事情。 int 是一个数字; an > Integer 是可以引用包含数字的对象的指针。

...

int 不是对象,不能传递给任何需要的方法 对象。一个常见的情况是使用提供的集合类( List , Map , Set ) - 尽管可以编写这些版本 提供与对象版本类似的功能的类。这 包装类( Integer , Double 等)经常需要 每当使用自省时(例如在反射 API 中)。

更好地描述何时使用一个与另一个:

在 int 和 Integer 之间进行选择

在进入之前,我会先介绍如何使用这些类型 详细说明原因。

  • 出于性能原因,首选int
  • 接受对象的方法(包括像List&lt;T&gt;这样的泛型类型) 将隐式要求使用 Integer
  • 使用Integer 对于低值(-128 到 127)因为实习-使用Integer.valueOf(int)而不是新的 整数(int)
  • 不要将==!= 与整数类型一起使用
  • 当你需要代表时考虑使用Integer 没有值(null)
  • 注意将整数值拆箱为具有空值的 int

【讨论】:

  • 你的回答很好。请注意使用原始值在移动/资源受限的应用程序中的性能优势。
  • "int 不是对象,不能传递给任何需要对象的方法。" doSomething(911) 怎么样? public Object doSomething (Object o) { // 做点什么!!!返回 o; }
  • 为什么不将 == 或 != 与整数类型一起使用?它不会自动拆箱到 int 吗?
【解决方案2】:

如果您可以使用int,请这样做。如果该值可以是 null 或用作对象,例如泛型,使用Integer

通常使用哪一个并不重要,但通常int 的性能稍好一些。

【讨论】:

  • 另外,使用Integer#intValue(Integer)Integer#valueOf(int) 来回更改也很简单
  • 我想你的意思是 Integer.intValue() ;) 随着 Java 5.0 中引入的自动装箱和拆箱,你不需要这样做。
  • 在许多情况下,int 的表现不仅略显,而且要好得多,尤其是在紧密循环中:)
【解决方案3】:

这种方法在实践中并不好,尽可能使用intInteger 的使用表明这个特定变量可以是 null(或者它在一个集合中,该死的泛型......) - 事实并非如此。

同样使用Integer 引入了装箱和拆箱的额外开销。

【讨论】:

    【解决方案4】:

    这是在大型项目中等待发生的潜在灾难。这里的编码器忘记了每个 Integer 实际上是一个新对象,并且,要将其用作 int,必须一直进行装箱和拆箱。它不仅效率低下,而且也不会按预期运行。最好建议您始终尽可能使用 int,并且仅使用 Integer 将这些值放入列表、容器或用于数据库存储。请记住,使用 >、

    【讨论】:

      【解决方案5】:

      总是尽可能地推广原始类型。

      原始类型不能用作 GenericArgument 或 null。

      【讨论】:

        【解决方案6】:

        不要只用它来循环。使用原始类型 int(性能更好),与 Class Integer 不同。

        Integer 类将原始类型 int 的值包装在一个 目的。 Integer 类型的对象包含一个字段,其类型 是整数。

        此外,该类还提供了几种转换 int 的方法 到一个字符串和一个字符串到一个 int,以及其他常量和 处理 int 时有用的方法。

        因此,如果您需要调用 Integer 函数或需要为其分配空值,请使用 Integer。

        对于像 List 这样的泛型,您还需要使用 Integer 而不是 int

        【讨论】:

          【解决方案7】:

          当需要使用对象时,你必须使用 Wrapper 类, 比如 Integer、Double、Float 等...

          例如:

           int n = Integer.parseInt("10");
          

          这里我们将字符串转换为整数(原始类型), 但方法 parseInt(String str) 仅适用于 Wrapper 类(即 Object), 所以我们使用了它......你会发现它在 java 中的更多用途。

          【讨论】:

          • 菜鸟问题:这不等于: int n = Integer.parseInt("10").intValue; ?
          【解决方案8】:

          装箱和拆箱可能会导致性能损失,因为您会产生在原始类型和引用类型之间进行转换的开销。

          但是,Integer 类添加了一些非常有用的附加方法。

          【讨论】:

            【解决方案9】:

            由于纯粹是面向对象的,我通常使用整数。 int 的性能绝对比它的对应对象好得多,但只有在循环数百万次时才会注意到。

            恕我直言,如果性能在您的应用程序中至关重要,并且您甚至想压缩一纳秒,那么请使用 int 而无需任何大脑。但是,如果主要关注 OO 和可读性,则使用 Integer。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-07-26
              • 2011-09-22
              • 1970-01-01
              • 1970-01-01
              • 2011-12-19
              • 2010-09-30
              • 1970-01-01
              相关资源
              最近更新 更多