프로그램을 작성하다 보면 서로 다른 타입간의 연사을 수행해야 하는 경우가 있는데 이럴때 연산을 수행하기 전에 타입을 일치시켜야 한다.
변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것을 형변환(casting)이라고 한다.
float num = 3.14f;
int num2 = (int)num;
// 변환하고자하는 타입코드를 입력하세요
형변화를 하는 방법은 변환하고자 하는 변수나 리터럴 앞에 변환시키고 싶은 타입을 괄호에 넣어 붙여주면 된다.
위 예시를 보면 float타입 num을 선언한후 리터럴을 저장한후 int 타입 num2에 num을 인트형으로 변환 시켜 저장하였다.
이러한 형변환은 간단하지만 몇가지 주의사항이 있다.
package study;
public class study {
public static void main(String [] args) {
//ex 1, 2
int a = 300;
byte b = (byte)a;
byte c = 30;
int d = (int)c;
System.out.println("b = " + b); // byte형으로 변환된 int a값
System.out.println("d = " + d); // int형으로 변환된 byte c값
}
}
}
}
b = 44
d = 30
int형은 byte형보다 큰타입이기 때문에 300이 저장된 a를 byte로 바꿀씨 값 손실이 발생하여 44가 출력되는 것을 알 수 있다.
package study;
public class study {
public static void main(String [] args) {
//ex3
float f = 1234f;
//= float f = (float)1234f;
byte b = 1000; // 에러발생
byte c = (byte)1000;
}
}
float타입 f는 정수 1234를 저장하지만, float타입 역시 1234를 저장하는데 아무런 문제가 발생하지 않기 때문에 컴파일러가 자동으로 형변환를 시킨다.
byte형 b의 경우 자신의 범위보다 큰 값을 저장했기 때문에 에러가 발생한다. 하지만 byte타입 c의 경우는 의도적으로 형변환를 붙여놨기 때문에 에러는 발생하지 않지만 값손실이 발생한다.