두 유형이 호환되면 Java가 자동으로 변환합니다. 예를 들어, int 유형의 값을 long 유형의 변수에 할당하는 것은 항상 가능합니다. 그러나 모든 유형이 호환되는 것은 아니므로 모든 유형 변환이 암시적으로 수행되는 것은 아닙니다. 예를 들어, double을 바이트로 변환하는 정의는 없습니다. 다행히도 호환되지 않는 유형 간에도 변환이 가능합니다. 이를 달성하려면 호환되지 않는 두 유형 간에 명시적인 변환을 수행하는 캐스트를 사용해야 합니다. 자동 유형 변환 및 강제 변환을 살펴보겠습니다.
1. Java의 자동 변환
다음 두 가지 조건이 충족되면 한 유형의 데이터가 다른 유형의 변수에 할당될 때 자동 유형 변환(자동 유형 변환)이 수행됩니다.
1. 이 2가지 유형은 호환됩니다.
2. 대상 유형 번호의 범위는 소스 유형의 범위보다 큽니다.
위의 두 가지 조건이 충족되면 확대 변환이 발생합니다. 예를 들어 int 유형의 범위는 모든 유형의 바이트의 유효한 범위보다 크므로 명시적인 캐스트 문이 필요하지 않습니다.
확대 변환의 경우 정수(integer) 및 부동 소수점(floating-point) 유형을 포함한 숫자 유형은 서로 호환되지만 숫자 유형과 문자 유형(char) 또는 부울 유형(bollean)은 호환됩니다. )은 호환되지 않습니다. 문자 유형(char)과 부울 유형(bollean)도 서로 호환되지 않습니다.
2. 호환되지 않는 유형 캐스팅
자동 유형 변환이 도움이 되긴 하지만 모든 프로그래밍 요구 사항을 충족하지는 않습니다. 예를 들어, 바이트 변수에 int 값을 할당해야 한다면 어떻게 하시겠습니까? 바이트 유형의 범위가 int 유형의 범위보다 작기 때문에 이 변환은 자동으로 발생하지 않습니다. 대상 데이터 유형에 맞게 소스 데이터 유형의 값을 더 작게 만들어야 하기 때문에 이 변환을 "축소 변환"()이라고도 합니다.
호환되지 않는 두 유형 간의 변환을 완료하려면 형변환을 수행해야 합니다. 소위 강제 유형 변환은 명시적 유형 변환에 지나지 않습니다. 일반적인 형식은 다음과 같습니다.
(target-type)value
이 중 대상 유형(target-type)은 지정된 값으로 변환할 유형을 지정합니다. 예를 들어, 다음 프로그램 세그먼트는 int 유형을 바이트 유형으로 강제 변환합니다. 정수 값이 바이트 유형의 범위를 초과하는 경우 해당 값은 바이트 유형의 범위(정수를 바이트로 나눈 나머지)를 모듈로로 취하여 감소됩니다.