Boxing과 Unboxing이 곧장 번복되선 안됩니다

 

Boxing은 int 값을 소유하는 유사 객체에 넣는 과정을 의미합니다. 반대로 Unboxing은 이러한 객체에서 값을 갖고오는 과정입니다.

BoxingUnboxing을 수행하는 동안 값 자체에는 아무런 변화가 없습니다. 그러므로 아무 의미없는 행동입니다. 이는 Java에서 암묵적으로 처리하는 autoboxingauto-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 = new Double(d).intValue(); // 규칙을 어긴 코드

  examineInt(new Integer(i).intValue()); // 규칙을 어긴 코드; 명백한 box/unbox
  examineInt(Integer.valueOf(i));  // 규칙을 어긴 코드; box된 int가 암묵적으로 auto-unbox가 이루어집니다

  examineInteger(i); // 규칙을 준수한 해결책; 값이 box된 이후 unbox되지 않습니다
  examineInteger(iger1.intValue()); // 규칙을 어긴 코드; unbox된 int가 autobox됩니다

  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