Boxing과 Unboxing이 즉시 번복되서는 안 됩니다.

 

boxing은 int 같은 값을 Integer 같은 유사한 객체에 넣는 과정입니다. unboxing은 Integer 같은 객체에서 기본 자료형 값을 찾아오는 과정입니다.

boxingunboxing을 하는 동안 원본 값은 변하지 않습니다. 때문에 필요하지도 않는 데 이 둘을 반복하는 것은 의미 없습니다. 이는 자동으로 boxing되거나 자동으로 unboxing되는 경우에도 적용됩니다. (e.g Java에서 기본 자료형/래퍼 클래스 전환을 암묵적으로 처리하는 경우)

규칙을 어긴 코드

public void examineInt(int a) {
  //...
}

public void examineInteger(Integer a) {
  // ...
}

public void func() {
  int i = 0;
  Integer iger1 = Integer.valueOf(0);
  double d = 1.0;

  int dIntValue = new Double(d).intValue(); // 규칙을 어긴 코드

  examineInt(new Integer(i).intValue()); // 규칙을 어긴 코드; 명백하게 boxing / unboxing하고 있습니다.
  examineInt(Integer.valueOf(i));  // 규칙을 어긴 코드; boxing된 int가 즉시 unboxing됩니다.

  examineInteger(i); // 규칙을 준수한 코드; boxing 되지만 unboxing 하지는 않습니다.
  examineInteger(iger1.intValue()); // 규칙을 어긴 코드; unboxing 된 int가 곧장 박싱됩니다.

  Integer iger2 = new Integer(iger1); // 규칙을 어긴 코드; unboxing이 필요 없습니다. 값을 재사용하면 됩니다
}

규칙을 준수한 해결책

public void examineInt(int a) {
  //...
}

public void examineInteger(Integer a) {
  // ...
}

public void func() {
  int i = 0;
  Integer iger1 = Integer.valueOf(0);
  double d = 1.0;

  int dIntValue = (int) d;

  examineInt(i);

  examineInteger(i);
  examineInteger(iger1);
}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project