IT/Java

[Java] 묵시적 타입 변환(자동 타입 변환)

Huitopia 2024. 2. 20. 09:57
728x90

자동 타입 변환

자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.

 

기본 타입을 허용 범위 순으로 나열

byte < short, char < int < long < float < double

 

byte byteValue = 10;
int intValue = byteValue;

byte 타입은 1byte, int 타입은 4byte 메모리의 크기로 int 타입의 허용 범위가 더 크기 때문에 자동 타입 변환이 된다.

 

long longValue = 5000000000L;
float floatValue = longValue; // 5.0E9F
double doubleValue = longValue; // 5.0E9

정수 타입이 실수 타입으로 대입될 경우에는 실수 타입은 정수 타입보다 허용 범위가 크기 때문에 자동 타입 변환이 된다.

 

char charValue = 'A';
int intValue = charValue; // 65

char 타입이 int 타입으로 자동 변환되면 유니코드 값이 int 타입에 대입된다.

 

허용 범위가 작은 타입이 큰 타입에게 자동 변환된다고 했지만 예외는 있다.

byte byteValue = 65;
char charValue = byteValue; // error

byte 타입은 char 타입보다 허용 범위가 작지만 char 타입의 허용 범위는 음수를 포함하지 않는데, byte 타입은 음수를 포함하여 자동 변환될 수 없다.

 

자동 타입 변환이 생기는 코드 예시 

package ch02.sec07;
public class PromotionExample {
    public static void main(String[] args) {
        byte byteValue = 10;
        int intValue = byteValue;
        System.out.println("intValue : " + intValue); // intValue : 10

        char chatValue = '가';
        intValue = chatValue;
        System.out.println("유니코드 : " + intValue); // 44032

        intValue = 50;
        long longValue = intValue;
        System.out.println("longValue : " + longValue); // 50

        longValue = 100;
        float flaotValue = longValue;
        System.out.println("floatValue : " + flaotValue); // 100.0

        flaotValue = 100.5F;
        double doubleValue = flaotValue;
        System.out.println("doubleValue : " + doubleValue); // 100.5
    }
}
728x90