자바에서 래퍼클래스는 어떻게 저장될까

이정빈·2024년 7월 23일
0

개념정리

목록 보기
2/2
post-thumbnail

자바에서는 2가지 형태로 값을 저장한다.

기본 자료형


위 사진에서 볼 수 있는 10개의 기본 자료형은 값을 그대로 저장한다. 예를 들어 클래스 필드로

int a = 20;

이라는 값을 갖는다고 생각해보자. 그럼 아래 그림처럼 힙 영역에 a를 저장하고, 20이라는 값 자체를 2진수로 바꾸어 저장한다.


참조 자료형

int a = 20;
A b = new A();

이번엔 위와 같은 코드가 작성되었다고 가정해보자. 아래에서 볼 수 있듯 new를 통해 인스턴스 A를 생성한 뒤 A의 주소값을 변수 b에 저장한다.

기본자료형이 아닌 참조 자료형은 이렇게 주소값이 저장됨을 알 수 있다.

그렇다면 래퍼클래스(Integer, Double, Byte, Character 등)는 어떻게 저장될까?


래퍼클래스도 참조 자료형이다.

결론부터 말하자면 참조자료형과 똑같이 저장된다. 기본 자료형 외에는 모두 참조 자료형이므로 위에서 본 참조자료형이 저장되는 방식으로 저장된다.

int a = 20; // 기본 자료형
Integer b = new Integer(20); // 래퍼클래스(참조자료형)

위에 그림에서 볼 수 있듯 int(기본 자료형)로 20을 선언하면 20에 해당하는 값을 a에 2진수로 저장한다.
반면 Integer(래퍼클래스)로 20을 선언하면 20에 해당하는 인스턴스를 생성한 뒤 그 인스턴스의 주소값을 b에 저장한다.

그럼 int c = (int)b;를 하면 어떻게 될까?

위 그림처럼 힙에 c가 생성되고 c의 값은 주소값이 아닌 b가 가리키는 인스턴스의 값을 읽어서 c에 값으로 저장한다.

참고

profile
사용자의 입장에서 생각하며 문제를 해결하는 백엔드 개발자입니다✍

0개의 댓글