import java.util.Date;
public class Practice {
public static void main(String[] args) {
Object[] a = new Object[10];
a[0] = "hello";
a[1] = new String("world");
a[2] = new Date();
a[3] = new Person("김철수", 15);
a[4] = new int[] { 1, 2, 3 };
a[5] = new String[] { "one", "two", "three" };
a[6] = new Integer(3);
a[7] = new Double(3.14);
a[8] = 3;
a[9] = 3.14;
}
}
int, double과 같은 기본 자료형은 객체가 아니다.
a 배열은 객체에 대한 참조만 저장할 수 있기 때문에, 123과 같은 정수 값을 a 배열에 그냥 넣을 수는 없다.
먼저 123 정수를 객체로 변환해야 한다.
그래서 줄 14, 15에서는 int 값으로 Integer 객체를 생성하고,
double 값으로 Double 객체를 생성해서 a 배열에 넣었다.
그런데 줄 16, 17에는 기본 자료형인 int, double을 그냥 넣고 있다. 에러인가?
에러가 아니다.
결국 배열에 넣어지는 것은 Integer 객체와 Double 객체이다.
줄 14와 16은 실행될 때 같은 일이 일어난다. 줄 16에서도 Integer 객체가 생성되어 배열에 넣어진다.
줄 15와 17도 실행될 때 같은 일이 일어난다. 줄 17에서도 Double 객체가 생성되어 배열에 넣어진다.
Java 컴파일러가 줄 16, 17을 컴파일할 때, Integer 객체, Double 객체가 생성되는 코드로 변환해서 컴파일해준다.
이와 같은 기능을 auto-boxing이라고 한다.
public class Practice2 {
public static void main(String[] args) {
int i = 3;
Integer obj1 = i;
int j = obj1;
double d = 3.14;
Double obj2 = d;
double f = d;
System.out.printf("%d %d %d\n", i, obj1, j);
System.out.printf("%f %f %f\n", d, obj2, f);
}
}
컴파일 결과, 줄 4에서 생성되는 코드는 다음과 같다.
Integer obj1 = new Integer(1);
이렇게 기본 자료형 객체가 생성되는 코드를 컴파일러가 자동으로 생성해주는 기능을
auto-boxing이라고 부른다.
컴파일 결과, 줄 5에서 생성되는 코드는 다음과 같다.
int j = obj1.intValue();
Integer 클래스의 intValue 메서드는 int 값을 리턴한다.
이렇게 기본 자료형 객체에서 기본 자료형 값을 리턴하는 메서드를 호출하는 코드를
컴파일러가 자동으로 생성해주는 기능을 auto-unboxing이라고 부른다.
auto-boxing은, 기본 자료형 값이 들어간 상자 객체를 자동으로 생성해 준다는 뜻이고,
auto-unboxing은, 상자 객체에서 기본 자료형 값을 자동으로 꺼내 준다는 뜻이다.
줄 8, 9에서도 동일하게 auto-boxing, auto-unboxing 이 일어난다.
'Study > Java' 카테고리의 다른 글
[Java] override, 업캐스팅과 다운캐스팅 (6) | 2020.05.02 |
---|