본문 바로가기
언어/Java

자료형

by 넬준 2021. 5. 20.

변수는 값을 저장할 수 있는 메모리 공간을 의미한다.

변수를 선언한다는 것은 값을 저장할 메모리 공간을 잡아둔 것을 의미한다.

상수 또한 같은 의미를 가진다. 하지만 변수와 다른 점은 상수는 한 번 값이 저장되면 그 뒤로 바꿀 수 없다.

 

변수에 값을 저장할 때 대입 연산자(= 등)를 사용

 

로컬 변수는 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.

즉, 변수는 선언된 블록 내에서만 사용이 가능하다.

 

char형 - 2byte의 크기, 문자 직접, 10진수, 16진수 등등 다양하게 저장 가능

char c = ''; //compile 에러 -> char c= ' ';

 

int형 - 자바에서는 byte나 short 타입의 변수를 연산하면 int로 변환 후 연산하고, 결과 역시 int이다.

자바에서 정수 연산을 4byte로 처리하기 때문이다. (long타입이 있으면 long타입으로 변환한다.)

 

실수형 - 기본은 double형으로 간주한다. 부동 소수점 방식으로 저장하고, 여기서의 가수, 지수를 전체 bit에 나눠서 저장한다. (가수m : 0<=m<1의 범위)

정수 리터럴에 e를 사용해 저장하려면 실수타입 변수에 저장해야한다.

double var = 2e5; //200000.0

 

 

char형은 int형으로 자동형변환되면 유니코드 값이 int형으로 저장된다.

byte형에서 char형으로 자동형변환 되지 않는다. 음수값을 가질 수도 있기 때문에!

(char형의 범위 : 0 ~ 2^16-1)

 

char형의 연산의 결과 역시 int형이다.

char c = 'c';
int result = c + 1; //'c'에 해당하는 유니코드가 int형으로 자동형변환되고 +1한 값이 저장됨
char c2 = (char)result; //바뀐 유니코드값을 char형으로 강제형변환 후 변수 c2에 저장
char c3 = 'c';
char c4 = 'c' + 1;
char c5 = c3 + 1; //compile 에러 -> int i = c3 + 1; or char c5 = (char)(c3 + 1);

c4에서 컴파일 에러가 나지 않은 이유는 'c'+1은 리터럴간의 연산이기 때문이다.

 

변수가 아닌 상수나 리터럴간의 연산은 프로그램 실행 중에 변하는 값이 아니기 때문에,

소스코드를 컴파일 시 컴파일러가 먼저 리터럴간의 연산을 먼저 실행한다. 즉 'c'+1의 값은

변하지 않기 때문에 'd'로 적은 것과 같다.

final char c6 = 'e';
char c7 = c6 + 1; //compile 오류x

c6를 상수로 선언했으므로 값이 변하지 않기 때문에 컴파일 시 연산이 끝나 컴파일 오류가 나지 않는다.

(참고 : http://blog.kurien.co.kr/495)

 

초기화

String str1 = null; //0
String str2 = ""; //0, 빈 문자열로 초기화 가능

char char1 = null; //x
char char2 = '\u000'; //o, null의 unicode
char char3 = ''; //x, 빈 문자열로 초기화 불가능
char char4 = ' '; //o, 공백으로 초기화 가능

 

'언어 > Java' 카테고리의 다른 글

Java 기본 6 - 추상클래스  (0) 2021.05.24
Java 기본 5 - Enum  (0) 2021.05.23
연산자  (0) 2021.05.20
JVM  (0) 2021.05.18
Java 기본 1  (0) 2021.05.17

댓글