자바에는 기본 타입과 Wrapper 클래스가 존재한다.
기본 타입 | Wrapper 클래스 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
float | Float |
long | Long |
double | Double |
char | Character |
java.lang
패키지에 포함되어 제공된다.//박싱
int i = 0;
Integer num = new Integer(i);
//언박싱
Integer num = new Integer(10);
int i = num.intValue();
JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 타입 변환을 해준다.
오토 박싱
은 기본 타입의 값을 해당 Wrapper 클래스의 객체로 변환하는 것을 의미한다. 오토 박싱은 코드에서 보이지 않지만 Wrapper 클래스 객체의 값을 할당하기 위해 객체를 생성한다.
오토 언박싱
은 Wrapper 클래스의 객체를 해당 기본 타입의 값으로 변환하는 것을 의미한다.
//오토 박싱
int i = 10;
Integer num = i;
//오토 언박싱
Integer num = new Integer(10);
int i = num;
편의성을 위해 오토 박싱과 오토 언박싱이 제공되지만, 내부적으로 추가 연산 작업이 거치게 된다. 따라서 오토 (언)박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현하자.
//오토 박싱 연산
public static void main(String[] args) {
long t = System.currentTimeMillis();
Long sum = 0L;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
System.out.println("실행시간: " + (System.currentTimeMillis() - t) + " ms");
}
//실행시간: 19ms
//동일 타입 연산
public static void main(String[] args) {
long t = System.currentTimeMillis();
long sum = 0L;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
System.out.println("실행시간: " + (System.currentTimeMillis() - t) + " ms");
}
//실행시간: 4ms