🔸 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
🔸 기본형과 참조형 간 형변환은 불가능
🔸 기본형에서 boolean을 제외한 나머지 타입은 서로 형 변환이 가능
➡️ (변환할 타입) 변환하고자 하는 변수
double d = 85.4d; int score = (int)d;
🔸 큰 타입에서 작은타입으로 변환할 경우, 경우에 따라 값 손실이 발생할 수 있다.
int i = 10; byte b = (byte)i; // 값 손실 없음 (10 -> 10) int i = 300; byte b = (byte)i; /* 값 손실 있음 (300 -> 44) -> int 300 = 00000000000000000000000100101100 (32bit) -> byte(8bit) 로 변환하면 00101100(10진수 44)로 잘리게 된다. */
🔸float(32bit, 7자리) -> double(64bit, 15자리)로 형변환
빈 공간은 0으로 채운다 지수 : float의 기저 127을 빼고 double의 기저 1023dmf 더해서 변환 가수 : float의 가수 23자리를 채우고 남은 자리는 0으로 채운다.
🔸 double -> float로 형변환
지수 : double의 기저 1023을 빼고 float의 기저 127을 더해서 변환 가수 : double의 가수 52자리 중 23자리만 저장되고 나머지는 버림(24번째 자리에서 반올림이 발생할 수 있음)
🔸 정수형 -> 실수형
실수형은 정수형보다 큰 저장범위를 갖기 때문에 형변환에 큰 문제가 없다.
하지만 실수형의 정밀도 제한으로 인해서 오차가 발생할 수 있다.예) int형의 최대값은 약 20억으로 10자리의 정밀도를 요구하지만, float형은 7자리의 정밀도를 제공하기 때문에 오차가 발생할 수 있다.
➡️ 8자리 이상의 값을 실수->정수 형변환할 때는 double형으로 형변환하는 것이 좋다.
🔸 실수형->정수형
실수형의 소수점 이하의 값은 버려진다.(버려지기 때문에 반올림 발생 X)
🔸 원칙 : 서로 다른 타입 간 대입, 연산을 할 때는 형변환을 하여 타입을 일치시켜야 한다.
🔸 작은 타입에서 큰 타입의 경우 형변환을 생략할 수 있다.float f = 1234; // 1234는 int형이지만 float타입의 변수 f는 1234를 저장하는 데 아무 문제가 없다. 하지만 byte b = 1000; // 위의 경우 imcompatible types: possible lossy conversion from int to byte 에러가 발생한다.
🔸 서로 다른 두 타입 간 연산을 할 경우 표현범위가 더 넓은 타입으로 형변환하여 연산을 수행한다.
int i = 3; double d = 1.0 + i; // == double d = 1.0 (double)i;