자바에는 기본자료형인 primitive type과 boxed primitive type이 존재한다.

 

java 1.5 이상 부터 primitive type과 boxed primitive type간의 autoboxing과 autounboxing을 제공한다.

 

memory 영역으로 나뉘어 보면, primitive type은 stack 영역에 저장된다. 반면, boxed primitive type은 내부적으로 primitive type을 갖고 있는 wrapping된 class이므로 heap영역에 저장된다.

 

 

Primitive Type

- 스택 영역에 저장되기 때문에, 메모리 효율성과 접근면에서 뛰어나다.

 

 

 

boxed Primitive Type

- collection에서 사용할 떄는 Primitive type을 사용할 수 없으므로 boxed primitive type을 사용해야한다.

 

- 명시적으로 null을 주입해야 할 경우

    ex) db에 명시적으로 null을 넣고자 할 때 int(primitive type)를 사용하면 기본 값(0)이 적용된다. 

 

- parameterized type을 사용할 때

   ex) List<Long>

 

- boxed primitives는 Wrapping Object이므로, 비교연산(==)에 주의하자.

 

 

Caching

- boxed primitive type에서는 자주 사용하는 값에 대해 Caching 기능을 갖고 있다.

 

 

 

Long 객체의 내부 코드를 살펴보면, -128~127 사이의 값을 Caching 해두고 있는데 범위 내의 값을 비교할 땐 미리 생성해 둔 객체로 비교를 한다.

 

    public static void main(String[] args){
        Long a = 127l;
        Long b = 128l;

        Long boxA = Long.valueOf(127);
        Long boxB = Long.valueOf(128);

        System.err.println(a==boxA);    //TRUE
        System.err.println(b==boxB);    //FALSE    

    }

 

 

위의 예제를 통해 살펴보면, 해당 값의 범위를 벗어 나면 비교연산에 실패하게 되므로 주의 해야한다.

+ Recent posts