3. 숫자형 변환
자바에서는 데이터 타입이 다른 숫자형 사이의 연산에 문제가 발생하지 않는다. 다만 연산의 결과는 두 연산자 중 범위가 넓은 쪽의 데이터 타입을 따른다.
▶ 데이터 타입에 따른 범위
byte < short < int < long < float < double
[표1]
int val1 = 1;
long val2 = 2;
int result = val1 * val2; //에러 연산의 결과는 long형이다.
[표2]
[표2]의 세 번째 문장은 연산을 수행할 수 없다. val1 * val2 연산 결과는 long형이다. 그러므로 int형의 변수 result에 담을 수 없다. [표3]과 같이 result를 long형으로 사용해야 한다.
long result = val1 * val2;
[표3]
▶ 타입간 연산 규칙
int * long = long
int * float = float
short * int = int
long * float = float
double * float = double
[표4]
자바에서는 데이터 타입간 형 변환도 자유롭다. 작은 범위의 데이터 타입은 자기보다 큰 데이터 타입으로 변환이 가능하다.
int val1 = 100;
long val2 = val1; //int형을 long형에 대입
float val3 = 54.32F;
double val4 = val3; //float형을 double형에 대입
[표5]
그러나 큰 범위의 데이터 타입은 자기보다 작은 데이터 타입으로 불가능하다.
long val1 = 2000;
int val2 = val1; //에러 - long형을 int형에 대입 불가
[표6]
단, 명시적인 형 변환을 사용하면 이런 반대되는 작업을 수행할 수 있다.
자신의 데이터 타입을 다른 종류의 데이터 타입으로 변환하는 것을 형 변환 또는 캐스팅(Casting)이라고 한다.
■ 이클립스에 Casting.java파일을 생성한다.
[그림1]
■ [표2]와 같이 입력한 후 Casting.java를 실행한다.
int val1 = 2019;
long val2 = val1;
int val3 = (int)val2;
System.out.println("최초값: " + val1 + " 변환 후: " + val3);
[표2]
[그림2]
[그림2]와 같이 최초값과 변환 후 값이 동일하다.
■ [표3]과 같이 입력한 후 Casting.java를 실행한다.
long val4 = 99999999999L;
int val5 = (int)val4;
System.out.println("최초값: " + val4 + " 변환 후: " + val5);
[표3]
[그림3]
[그림3]의 콘솔창의 두 번째 줄 변환 후 값을 보자. 형 변환하는 데이터 타입의 범위를 초과하였을 경우에는 결과를 예측할 수 없다.
■ [표4]와 같이 입력한 후 Casting.java를 실행한다.
double val6 = 12.34;
int val7 = (int)val6;
System.out.println("최초값: " + val6 + " 변환 후: " + val7);
[표4]
[그림4]
[그림4]의 콘솔창의 세 번째 줄 변환 후 값을 보면 부동 소수점형을 정수형으로 변환하면 소수점 이하의 숫자는 무시된다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바연산 #2(대입 연산, 증가와 감소 연산) (0) | 2019.03.18 |
---|---|
자바연산 #1(산술연산) (0) | 2019.03.17 |
데이터 타입의 사용 #2 (0) | 2019.02.20 |
데이터 타입의 사용 #1 (0) | 2019.02.17 |
데이터 타입 (0) | 2019.02.16 |