Java에서 타입은 크게 Primitive Type과 Reference Type이 있다.
쉽게 말해서 Primitive Type은 실제 데이터 값을 저장하는 타입이고,
reference Type은 객체의 주소를 저장하는 타입이다.
1. String s1 = "this is a string";
2. String s2 = new String("this is a string");
위와 같이 s1를 큰따옴표로 생성했을경우에는 literal하게 생성하게 되는데, 이 때는 String constant Pool에 저장된다. s2의 경우에는 new 연산자를 사용해서 heap 영역에 저장된다. 이 때 String constant Pool에 저장된 문자열은 재사용하게 할 수 있게 된다.
public class A {
public static void main(String[] args) {
B obj = new B();
}
}
class B {
}
위 소스의 경우에는 클래스 B를 new 연산자를 이용해서 obj 참조 변수에는 B 객체의 주소가 저장된다.
obj 참조 변수는 스택 영역에 B 객체의 주소를 저장하고, 실제 B 객체는 힙 영역에 저장된다.
obj는 B객체의 주소가 저장 되기 때문에, B객체를 이용해서 B클래스의 메소드나 변수들을 사용할 수 있다.
Boxing : Primitive Type -> Wrapper 클래스(Reference Type)로 변환
Unboxing : Wrapper 클래스 -> Primitive Type으로 변환
Integer a = new Integer(3);
int b = 3;
Integer c = (Integer)b; // Boxing
int d = (int)a; // Unboxing
// 자동으로 된다.
int e = a;
Integer f = b;