Java에서 확대 변환(Widening Primitive Conversion)은 작은 크기의 기본 타입이 더 큰 크기의 타입으로 자동 변환되는 과정을 말합니다. 예를 들어 byte → short → int → long → float → double 순서로 데이터 손실 없이 변환이 이루어집니다.
아래는 확대 기본 변환의 동작을 보여주는 대표적인 예제입니다.
예제 코드
public class Demo {
public static void main(String[] args) {
System.out.print("H" + "E");
System.out.print('L');
System.out.print('L');
System.out.print('O');
}
}실행 결과
HELLO
코드 분석
위 코드에는 Demo라는 이름의 클래스가 있으며, 그 안에 main 메서드가 정의되어 있습니다. 먼저 큰따옴표(" ")로 묶인 문자열 두 개를 '+' 연산자로 연결하여 출력하고, 이후 작은따옴표(' ')로 묶인 문자들을 하나씩 출력합니다.
여기서 중요한 점은 확대 기본 변환이 발생하려면 반드시 '+' 연산자가 필요하다는 것입니다. '+' 연산자는 좌변과 우변 모두에서 정수 타입을 기대하기 때문에, char 타입의 문자 'L', 'O'는 각각 해당하는 유니코드 정수 값으로 확대 변환됩니다.
즉, 첫 번째 print 문에서는 문자열 연결(String concatenation)이 일어나 "HE"가 되고, 이후 char 값들은 정수로 승격된 후 다시 문자로 해석되어 최종적으로 "HELLO"라는 결과가 출력됩니다.
정리
- 확대 변환은 작은 타입에서 큰 타입으로 자동으로 이루어지며 데이터 손실이 없습니다.
char,byte,short등은 산술 연산 시int로 승격됩니다.'+'연산자 사용 여부에 따라 문자열 연결인지, 수치 연산(확대 변환)인지 동작이 달라집니다.