반응형
형변환(Casting)이란?
변수나 리터럴의 타입을 다른 타입으로 변환
변환에 사용되는 괄호()는 '캐스트 연산자' 또는 '형변환 연산자'라고 부른다.
기본형간의 형변환
기본형(primitive type) 변수에서 boolean을 제외한 나머지 타입들은 서로 형변환 가능
double d = 85.4;
int score = (int)d; // double -> int 형변환
기본형간의 형변환 수식 및 결과
변환 | 수식 | 결과 |
int → char | (char)65 | 'A' |
char → int | (int)'A' | 65 |
float → int | (int)1.6f | 1 |
int → float | (float)10 | 10.0f |
실수형 간의 형변환
실수형간에 형변환에서, 작은 타입 → 큰 타입으로 변환하는 경우 빈 공간을 0으로 채운다.
double d = 1.0e100; // float의 최대값보다 큰 값을 d에 저장
float f = (float)d; // d의 값을 float로 형변환 -> f = 무한대
double d = 1.0e-50; // float의 최소값보다 작은 값을 d에 저장
float f = (float)d; // d의 값을 float로 형변환 -> f = 0
정수형과 실수형 간의 형변환
float 타입의 값을 int 타입으로 변환할 때 소수점 이하 값은 반올림이 아닌 버림으로 처리
정수형과 실수형간에 형변환이 있을때 실수형의 정밀도의 제한으로 인한 오차가 발생할 수 있다.
10진수로 8자리 이상의 값을 실수형으로 변환할 때는 float가 아닌 double로 형변환
float는 정밀도가 7자이기 때문에 8자리 이상의 정수를 저장할때 오차가 발생
91234567 -(float)-> 91234568.0 -(int)-> 912345678 // 오차 발생
91234567 -(double)-> 91234567.0 -(int)-> 91234567
자동 형변환
형변환에 경우 컴파일러가 생략된 형변환을 자동적으로 추가해 형변환 생략 가능(편의상의 이유)
컴퍼일러는 기존의 값을 최대한 보존할 수 있는 타입으로(값의 범위가 작은 타입 → 큰 타입으로 변환) 자동 형변환
큰 타입 → 작은 타입의 형변환은 값 손실이 발생할 수 있다.
연산과정에서 자동적으로 발생하는 형변환을 산술 변환(usual arithmetic conversion) 이라고 한다.
// float f = (float)1234;
float f = 1234; // 형변환 생략
byte b = 1000; // byte의 범위를 넘는 값을 저장 -> 에러
char ch = (char)1000; // 명시적 형변환, 에러가 발생하지 않는다.
// 산술 변환
int i = 3;
// double d = 1.0 + (double)i;
double d = 1.0 + i;
자동 형변환의 규칙
좁은 타입 → 넓은 타입의 형변환 경우 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환
byte(1byte) → short, char(2byte) → int(4byte) → long(8byte) → float(4byte) → double(8byte)
반응형
'Java' 카테고리의 다른 글
산술 변환(usual arithmetic conversion)이란? (0) | 2021.09.11 |
---|---|
연산자(orperator) (1) | 2021.09.11 |
기본형(primitive type) 변수 (0) | 2021.09.11 |
변수의 타입 (0) | 2021.09.11 |
변수의 명명규칙 (0) | 2021.09.11 |