변수 선언 : 값을 저장할 메모리를 준비시키는 명령.
변수 종류
정수 : byte(1 byte), short(2 byte), int(4 byte), long(8 byte)
부동소수점 : float(4 byte), double(8 byte)
문자 : char(2 byte, unsigned), UTF-16 코드값 저-장
논리값 : boolean, JVM에서는 4 byte를 사용, 메모리에 저장될 때 true는 1, false는 0으로 저장된다.
문자열(주소) : String, 문자열이 저장된 주소를 저장. 포인터같은 개념으로 봐야하나?
메모리 종류
Primitive data type(원시 데이터 종류) : 자바에서 기본으로 정의하는 메모리 종류
Reference (레퍼런스) : 데이터가 저장된 메모리의 주소를 저장하는 메모리 종류.
= : 할당 연산자(연산을 수행하는 명령)
우측에 지정된 값을 좌측에 있는 이름이 가리키는 메모리에 저장시키는 명령어
변수 할당 : 변수명 = [변수, 리터럴] ex) int a = 0;(Literal), int b = a;(Variable)
int a = b;에서 a는 l-value, b는 r-value라고 지칭한다.
변수 선언 후 초기화를 한 후 사용해야한다. 초기화 안한 상태에서 출력 혹은 사용하려하면 컴파일 오ㅗㅗㅗㅗ류
정수는 원래 4바이트인데 1바이트인 byte에 정수를 넣을 때 :
byte는 4바이트값을 저장할 수 없지만 1 byte가 저장할 수 있는 범위 내에서의 저장은 가능하다.
2바이트인 short에 넣을 때도 마찬가지로 2byte가 저장할 수 있는 범위 내에서의 저장이라면 가능하다.
정수 연산은 기본적으로 int로만 진행되기때문에 byte, short는 연산을 할 수 없다. (연산결과값도 int).
단, 위와 마찬가지로 데이터타입이 저장할 수 잇는 범위 내의 값인 경우 형변환을 써서 저장시킬 수 있다.
ex) short s3 = (short) 3*5; // 3*5는 int형인 15가 나오며 이를 short로 형변환.
!! 그 데이터타입이 저장할 수 있는 범위를 생각하고 진행해야한다.
우리가 써넣는 숫자는 4바이트를 기준으로 한다. 그 이상의 숫자를 하려면 숫자 뒤에 L을 붙여야한다.
단, 8바이트 표현으로는 2바이트 이하의 데이터타입이 저장가능한 범위라도 저장할 수 없다.
( 4바이트 정수 리터럴의 경우에만 byte, short에 저장할 수 있음.)
int 데이터타입에 들어있는 값이 byte나 short 데이터타입의 메모리에 저장할 수 있을 지라도 리터럴이 아닌 경우에는 큰 크기의 메모리값을 작은 크기의 메모리값에 저장할 수 없다.
ex) int i = 100; byte b = 100; b = i; // 리터럴이 아닌 변수기때문에 저장이 불가능
하지만 b = (byte) i; 처럼 형을 바꾸면 byte 데이터타입이 저장할 수 있는 크기까지는 저장이 가능해진다.
역으로 long에는 byte, short, int 모든 정수형 데이터를 넣을 수 있다.
int에는 long형식의 데이터를 넣을 수 없다. 하지만 마찬가지로 int로 캐스팅하면 int의 저장 범위 내에서 저장이 가능해진다.
'프로그래밍 > 이론' 카테고리의 다른 글
2진수와 표기법 (0) | 2018.05.30 |
---|---|
컴파일러와 바이트코드 (0) | 2018.05.30 |
문자 2진화와 한글처리 특징 (0) | 2018.05.30 |