자바는 자동 형변환과 명시적 형변환 기능을 제공한다. 하나씩 살펴보자.
자바의 숫자 자료형에서는 int < long < double
순으로 더 숫자 범위를 포함할 수 있다. 이때 int의 값을 long이나 double에 대입할려면 어떻게 될까? (상대적으로) 작은값의 범주를 가지는 int는 더큰 값의 범주를 가지는 long, double의 자료형으로 자동 형변환이 일어난다.
public class Casting1 {
public static void main(String[] args) {
int intValue = 10;
long longValue;
double doubleValue;
longValue = intValue; //int -> long
System.out.println("longValue = " + longValue); //10
doubleValue = intValue; //int -> double
System.out.println("doubleValue1 = " + doubleValue); //10.0
doubleValue = 20L; //Long -> double
System.out.println("doubleValue2 = " + doubleValue); //20.0
}
}
반대로 더 넓은 범주를 가진 long, double이 int로 형변환을 시도하는 상황을 생각해보자. 이때는 리스크를 가지고 있다.
public class Casting3 {
public static void main(String[] args) {
long maxIntValue = 2147483647L; //int max
long maxIntOver = 2147483648L; //int max + 1
int intValue = 0;
intValue = (int) maxIntValue;
System.out.println("maxIntValue casting=" + intValue); //2147483647
intValue = (int) maxIntOver;
System.out.println("maxIntOver casting=" + intValue); //-2147483648
}
}