한모로그 2023. 1. 14. 11:00

자동 타입 변환

  • 데이터 타입을 다른 타입으로 변환하는 것
  • 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생

    출처, 이것이 자바다



    출처, 이것이 자바다


  • 정수 타입이 실수 타입으로 대입되면 무조건 자동 타입 변환이 됨
  • 예외: char 타입보다 허용 범위가 작은 byte 타입은 char 타입으로 자동 변환될 수 없음
package ch02.sec07;

/*
 * 자동형변환(promotion) 예제
 * 타입이 일치.
 = 값이 할당(대입,저장)이 될때에는 타입이 일치가 되고나서 값이 저장된다.(중요)
 */

public class PromotionExample {

    public static void main(String[] args) {

        // int형 밑의 byte, short형은 예외를 둠. FloatDoubleExample.java 참고.
        byte byteValue = 10;

        // 4바이트 기억장소 = 1바이트 값 
        // byteValue 변수의 값이 int형으로 변환되어, 타입이 일치된 후에 할당된다.(자동형변환)
        int  intValue = byteValue;

        System.out.println("intValue: " + intValue); -> intValue: 10

        char charValue = '가';
        intValue = charValue; //char 2byte -> int 4byte로 변환되고, 값이 할당.
        System.out.println("가의 유니코드: " + intValue); -> 가의 유니코드: 44032

        intValue = 50;
        long longValue = intValue; // int 4바이트가 long 8바이트로 변환되어, 값이 할당.
        System.out.println("longValue: " + longValue); -> longValue: 50

        longValue = 100;
        //실수데이터 타입 > 정수데이터 타입
        //실수데이터 타입 4byte = 정수데이터 타입 8byte;
        //8byte long타입의 값이 4byte float형으로 변환되어 값이 저장된다.
        float floatValue = longValue; //100(8byte) -> 100.0(float)
        System.out.println("FloatValue: " + floatValue); -> FloatValue: 100.0

        floatValue = 100.5f; //(float)100.5;
        double doubleValue = floatValue; //(double)floatValue;
        System.out.println("doubleValue: " + doubleValue); -> doubleValue: 100.5

    }

}