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"