Search code examples
javaautoboxingunboxing

Java Autoboxing through a method


Let's say that I have a class:

class A {
  private Integer i;

  public int getI() {
    return i;
  }

  // Setter, etc.
}

and I write:

A a = // initializer

Integer b = a.getI();

how many Integers will there be? My naive reading about autoboxing/unboxing leads me to believe that the answer is 2, but if getI() were:

public Integer getI();

then the answer would be 1.


Solution

  • You are absolutely correct, with one caveat: the answer to the first part depends on the value of Integer i.

    • In the first scenario, one Integer is created in the constructor, and the other one is created when boxing the int coming from getI()
    • In the second scenario, there needs to be no boxing, so there's only one Integer object.

    Note: if the value of the Integer i is small (more precisely, between -128 and 127, inclusive), autoboxing will produce the same Integer through interning.