각 메모리에 저장 될때 할당되는 크기가 다르다 .
개발자가 직접 변수에 값을 입력하면 이를 리터럴(literal)이라고 부르며
정수형 변수에 값을 대입한 걸 정수 리터럴 이라고 부른다
1 byte , 8 bit (0과 1 이 저장되는 단위 : 8개의 0과 1이 저장 될 수 있다 )
범위: -128 ~ 127
수식: -2^7 ~ (2^7 - 1)
byte var = 128 ;
//허용되는 범위를 초과하였기 때문에 컴파일 에러가 발생한다
2 byte , 16 bit
범위: -32,768 ~ 32,767
수식: -2^15 ~ (2^15 - 1)
2 byte , 16 bit
범위: 0 ~ 65,535 (음수 없음, 양수만 표현)
수식: 0 ~ (2^16 - 1)
char는 유니코드 문자를 저장하는 타입이지만 정수형으로도 취급됨
4 byte , 32 bit
범위: -2,147,483,648 ~ 2,147,483,647
수식: -2^31 ~ (2^31 - 1)
8 byte , 64 bit
범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
수식: -2^63 ~ (2^63 - 1)
기본적으로 컴파일러는 정수 리터럴을 int 타입으로 간주하기 때문에 int 의 허용범위를 넘는
정수 리터럴을 사용할 시에는 뒤에 L을 붙혀준다 (long 타입임을 컴파일러에게 암시)
이러한 자바에서 기본 타입(primitive type)인 byte, short, char, int, long과 같은 정수형 변수의 경우 변수의 이름과 값이 전부 스택 (stack) 메모리 에 저장된다
반면 참조 타입 *(객체)Object 변수 이름과 객체에 대한 참조(reference)는 스택 (stack) 메모리 , 실제 객체의 데이터는 (heap)힙 메모리 에 저장된다