java, 기본 타입과 참조 타입의 특징과 차이
자바의 데이터 타입
- 자바의 데이타 타입을 크게 분류하면 아래와 같이 두 개로 나뉜다.
- 기본 타입(primitive type)
- 참조 타입(reference type)
기본 타입(primitive type)
- 기본 타입은 리터럴(literal)을 그 값으로 가지며, 리터럴의 종류는 아래와 같다
구분 | 리터럴 타입 | 형태 | 길이 |
논리타입 | boolean | true/false | 1byte |
문자타입 | char(아스키코드) | 'a', '4', '(', ' ', '\t' | 2byte |
char(유니코드) | '파', '이', '썬' | 2byte | |
정수타입 | byte | -127, 0, 128 | 1byte |
short | -300, 0, 3 | 2byte | |
int | -123, 0, 1234 | 4byte | |
long | -2134L, 0, 565L | 8byte | |
실수타입 | float | -14.34F, 1.0F, 0.345F | 4byte |
double | -54.345, 0, 3.454 | 8byte |
논리타입
- true
- false
정수타입
- 정수타입(Integer Type)은 수학에서 Integer Number를 의미한다. 음수와 양수, 0이다.
- 소수점이 없다.
- 4바이트를 초과하는 경우 숫자는 long 타입으로 표현한다. 숫자 마지막에 L을 붙인다. 30L, -19L
byte
- bit가 8개 모여 byte를 이룬다. byte는 음수 표현을 위하여 최상위 비트(첫 자리)로 음수와 양수를 표현한다.
- 0을 기준으로 1을 빼거나 더한다고 생각하면 아래의 표가 이해하기 쉽다.
이진수 | 정수 |
---|---|
01111111 | 127 |
00000001 | 1 |
00000000 | 0 |
11111111 | -1 |
10000001 | -127 |
10000000 | -128 |
char 문자타입
- 자바의 문자타입은 유니코드이며 2바이트이다. 유니코드는 아스키코드와 한글 등 다양한 언어를 포함한다.
- 문자타입을 초기화 할 때 ‘‘(작은따옴표)를 사용한다.
- 유니코드를 알고 있다면, 숫자로 초기화할 수 있다.
- 유니코드는
'\u0041'
이란 형태로도 출력할 수 있다.
char var1 = 'a';
char var2 = 97;
System.out.println(var1==var2); // true
char c3 = '\u0041';
다양한 진수
- 보통 10진수를 사용하나 8진수와 16진수를 사용 가능하다.
- 전화번호(01012341234)를 int로 저장할 수 없는 이유가 여기에 있다.
int i1 = 10;
int i2 = 01012341234;
int i3 = 0x1234;
실수타입
- 실수타입은 소수점이 없다.
- float 타입은 숫자 마지막에 F를 붙인다. 343.234F
참조타입 (reference type)
- 기본 타입으로 선언한 변수는 값은 초기화한 값과 같다.
- 참조 타입은 초기화한 값이 아닌, 해당 메모리가 적재된 값이 위치하는 주소를 가진다.
- 참조타입은 리터럴을 제외한 모든 타입이다. 클래스, 필드, 배열, 문자열 등.
- 참조타입이 메모리를 사용하는 방식은 아래의 표와 같다.
스택 | 힙 | ||
변수 | 값 | 주소 | 값 |
int a | 3 | ||
String b | heap 30번지 | heap30번지 | "java" |