5.0에 새로 추가된 Auto boxing, Auto unboxing이 정수 중에서는 -128~127 사이의 정수에만 적용이 되는군요.

Daum DNA에 올라온 글의 거의 마지막 부분에 나오는 소스코드 입니다.

소스코드보기
[#M_ more.. | less.. |

public class AutoBoxingTester {

public static void main(String[] args) {
int i = 0;
Integer ii = i; // boxing. JDK 1.4에서는 incompatible type error가 발생 했었으나 Tiger에서는 괜찮다.
int j = ii; // unboxing

for (ii = 0; ii < 5; ii++) { // Integer인데도 ++ 연산자 지원.
}

i = 129;
ii = 129;
if (ii == i) {
System.out.println("i is same ii.");
}

// -128 ~ 127 사이의 수는 unboxing이 되어 == 연산이 허용되지만,
// 그 범위 외의 경우 Integer로 boxing된 상태므로 equals를 이용해야함.
// 이는 버그가 발생했을 경우 찾기 쉽지 않은 단점도 내포하고 있다.!!
checkIntegerSame(127, 127); // same
checkIntegerSame(128, 128); // Not same
checkIntegerEquals(128, 128); // equals
checkIntegerSame(-128, -128); // same
checkIntegerSame(-129, -129); // Not same
checkIntegerEquals(-129, -129); // equals

System.out.println("--------------------------------------------");
Boolean arriving = false;
Boolean late = true;
String ret = arriving ? (late ? "도착했지만 늦었네요." : "제시간에 잘 도착했군요.") :
(late ? "도착도 못하고 늦었군요." : "도착은 못했지만 늦진 않았군요.");
System.out.println(ret);

StringBuilder sb = new StringBuilder();
sb.append("appended String");
String str = "just String";
boolean mutable = true;
CharSequence chSeq = mutable ? sb : str;
System.out.println(chSeq);
}

private static void checkIntegerSame(Integer ii, Integer jj) {
if (ii == jj) {
System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is same ii.");
} else {
System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is NOT same ii!!");
}
}

private static void checkIntegerEquals(Integer ii, Integer jj) {
if (ii.equals(jj)) {
System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is equals ii.");
} else {
System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is NOT equals ii!!");
}
}

}

_M#]
테스트 결과 보기
[#M_ more.. | less.. |
i is same ii.
ii = 127, jj = 127 ==> jj is same ii.
ii = 128, jj = 128 ==> jj is NOT same ii!!
ii = 128, jj = 128 ==> jj is equals ii.
ii = -128, jj = -128 ==> jj is same ii.
ii = -129, jj = -129 ==> jj is NOT same ii!!
ii = -129, jj = -129 ==> jj is equals ii.
——————————————–
도착도 못하고 늦었군요.
appended String
_M#]
정수는 -128 ~ 127 의 범위를 벗어날 경우 unboxing이 되지 않는 다는 것을 보여주는 예제였습니다.