자바에는 기본형(primitive type)과 참조형(ReferenceType)이 존재한다.
기본형은 값을 저장하는 자료형이다.
기본형은 null 값을 가질 수 없다.
Type | Bits |
---|---|
boolean | 1 |
byte | 8 (1 Byte) |
char | 16 (2 Bytes) |
short | 16 (2 Bytes) |
int | 32 (4 Bytes) |
long | 64 (8 Bytes) |
float | 32 (4 Bytes) |
double | 64 (8 Bytes) |
※ boolean은 true, false만 존재한다.
※ char는 음수 값을 가질 수 없다.
float f = 100.0; //ERROR!!!! 실수 상수는 기본적으로 double이다.
//연산은 피연산자의 타입이 같아야만 수행된다. --> 자동 형 변환
short s = 10;
int i = 20;
//short sum = s + i; ERROR!!!
int sum = s + i; //정수 연산일 경우 int 타입으로 자동 형 변환된다.
int num1 = 10;
double num2 = 11.52;
double result = num1 + num2; // num1이 double형으로 자동 형 변환되어 계산된다.
float a = (float)100.0;
int num = (int)100.1234; // 100만 저장됨
※ 명시적 형 변환은 데이터의 손실이 발생할 수 있다.
참조형은 주소를 저장하는 자료형이다.
실제 값은 힙(heap)영역에 저장되고, 그 데이터의 주소가 스택(stack) 영역에 존재하는 참조형 변수에 저장된다.
※ 실제 메모리 주소는 아님에 주의하자. Java에서 참조 변수는 객체의 실제 메모리 주소를 직접적으로 저장하지 않는다. 대신, 참조 변수는 객체가 힙 메모리에 할당된 위치를 가리키는 값(참조)를 가지고 있다.
Type | Bits |
---|---|
배열 (array) | 32 (4 Byte) |
열거 (enumeration) | 32 (4 Byte) |
클래스 (class) | 32 (4 Bytes) |
인터페이스 (interface) | 32 (4 Bytes) |
※ 할당되는 메모리 크기는 4 Byte로 동일하다.
why? 객체의 주소값을 저장하기 때문이다.
참조형 각각의 자세한 설명은 이후에 포스팅 할 예정이다.