Java Autoboxing通过一种方法

时间:2013-12-11 21:55:54

标签: java autoboxing unboxing

假设我有一个班级:

class A {
  private Integer i;

  public int getI() {
    return i;
  }

  // Setter, etc.
}

我写道:

A a = // initializer

Integer b = a.getI();

会有多少个整数?关于自动装箱/拆箱的天真读物让我相信答案是2,但如果getI()是:

public Integer getI();
然后答案是1。

2 个答案:

答案 0 :(得分:3)

你是绝对正确的,但有一点需要注意:第一部分的答案取决于Integer i的价值。

  • 在第一个场景中,在构造函数中创建一个Integer,在装箱来自int
  • getI()时创建另一个Integer
  • 在第二种情况下,不需要拳击,因此只有一个Integer i对象。

注意:如果Integer的值很小(更准确地说,介于-128和127之间),则自动装箱将生成相同的{{1}}到interning

答案 1 :(得分:1)

正确.... ISH

理论上,编译器/ JIT / JVM /等可以优化自动装箱,但我不知道它是否真的会。

也可以重复使用相同的Integer对象。例如,Integer.valueOf(2)保证在每次调用它时为您提供相同的Integer对象并重新使用相同的对象。这仅保证在-128到+127范围内的值,但是,它可能发生在该范围之外但不应该依赖。

相关问题