Java에서는 기본형 타입과 참조형 타입이 있습니다. 저도 너무나 자연스럽게 사용하고 있지만 아래의 질문을 받으니 대답 할 수가 없었습니다.
Java에서 Primitive Type, Reference Type은 메모리 어디에 저장이 될까요?
이에 대한 정답은 아래에 정리하겠습니다.
1. Primitive Type (기본형 타입)
- 기본값이 NULL이 아닌 값들로 이루어져있다.
- 실제 값을 저장하고 메모리는 스택(Stack) 메모리에 저장된다.
- 컴파일 에러를 발생시킨다.
타입 | 메모리 크기 | 기본값 | 표현 범위 |
boolean | 1 byte | false | true, false |
byte | 1 byte | 0 | -128 ~ 127 |
short | 2 byte | 0 | -32,768 ~ 32,767 |
int | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 |
long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float | 4 byte | 0.0F | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 |
double | 8 byte | 0.0 | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 |
char | 2 byte | '\u0000' | 0 ~ 65,535 |
2. Reference Type (참조형 타입)
- 기본형 타입을 제외한 모든 타입
- 기본값은 NULL이다.
- 값이 저장되어 있는 곳의 주소값을 저장하고, 메모리는 힙(heap) 메모리에 저장된다.
- 런타임 에러를 발생시킬 수 있다.
타입 | 예시 | 기본값 | 할당되는 메모리 크기 |
Array(배열) | int[] array = new int[10]; | NULL | 4 byte (객체 주소값) |
Enumeration(열거) | Enumeration<String> e = ... | NULL | |
Class(클래스) | String str = "reference"; String str = new Student(); |
NULL | |
Interface(인터페이스) | NULL |
3. 정리
위의 내용에서 주요한 차이점은 굵은 글자로 표시해두었습니다.
- 실제값 vs 주소값
- 스택(Stack) vs 힙(Heap)
- 메모리 구조와 Stack/Heap 메모리
반응형
'기초 지식 > Java' 카테고리의 다른 글
[Java] Checked Exception, Unchecked Exception (0) | 2021.05.18 |
---|---|
[Java] String 선언 방식에 따른 차이 (0) | 2021.05.08 |
[Java] Java의 날짜, 시간 클래스는 어떻게 편해졌나 (0) | 2021.04.26 |
Java 1.8 Optional (0) | 2021.03.28 |
Java 1.8 Default Method (0) | 2021.03.02 |