JAVA 기본 문법 정리 - 2. 변수(Variable) ③

    반응형
    SMALL
    반응형

    형변환

    형변환(캐스팅, casting)이란 : 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

     

    형변환 방법

    형변환하고자 하는 변수나 리터럴의 앞에 변환하고자하는 타입을 괄호와 함께 붙여주면 된다.

    (타입)피연산자

    여기에 사용되는 괄호()는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅(casting)'이라고도 한다.

    double d = 85.4;
    int score = (int)d; // double타입의 변수 d를 int타입으로 형변환
    
    // 85 출력

    -기본형간의 형변환

    변환 수식 결과
    int  char (char) 65 'A'
    char  int (int) 'A' 65
    float  int (int) 1.6f 1
    int  float (float) 10 10.0f

    ** float타입의 값을 int타입으로 변환할 때 소수점 이하의 값은 반올림이 아닌 버림으로 처리된다.

    위의 표에서도 알 수 있듯이 float리터럴인 1.6f를 int로 변환하면 1이 된다.

     

    입력

    class CastingEx2
    {
          public static void main(String[] args)
          {
                byte b = 10;
                int i = (int)b;
                System.out.println("i=" + i);
                System.out.println("b=" + b);
               
                int i2 = 300;
                byte b2 = (byte)i2;
                System.out.println("i2=" + i2);
                System.out.println("b2=" + b2);
          }
    }

    출력

    i=10
    b=10
    i2=300
    b2=44

    byte형 값을 int형으로, int형 값을 byte형으로 변환하고 그 결과를 출력하는 예제이다. byte와 int는 모두 정수형으로 각각 1 byte(8 bit)와 4 byte(32 bit)의 크기를 갖는다.

    byte와 int간의 형변환

    byte의 범위를 int가 포함하고 있으며, int가 byte보다 훨씬 큰 표현 범위를 갖고 있다. 위의 그림에서 볼 수 있는 것처럼 byte값을 int값으로 변환하는 것은 1 byte에서 4 byte로 나머지 3 byte(24자리)를 단순히 0으로 채워 주면 되므로 기존의 값이 그대로 보존된다.
     반대로 int값을 byte값으로 변환하는 int값의 상위 3 byte(24자리)를 잘라내서 1 byte로 만드는 것이므로 기존의 int값이 보존될 수도 있고 그렇지 않을 수도 있다.

     

    기본형의 자동형변환이 가능한 방향

    위의 그림은 형변환이 가능한 7개의 기본형을 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열한 것이다.
    화살표방향으로의 변환, 즉 왼쪽에서 오른쪽으로의 변환은 캐스트 연산자를 사용하지 않아도 자동형변환이 되는 변환이며, 그 반대 방향으로의 변환은 반드시 캐스트 연산자를 이용한 형변환을 해야 한다.

    보통 자료형의 크기가 큰 것일 수록 값의 표현범위가 크기 마련이지만, 실수형은 정수형과는 값을 표현하는 방식이 다르기 때문에 같은 크기일지라도 실수형이 정수형보다 훨씬 더 큰 표현 범위를 갖기 때문에 float와 double이 같은 크기인 int와 long보다 오른쪽에 위치한다.

     

    <요약>
    1. boolen을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
    2. 기본형과 참조형은 서로 형변환할 수 없다.
    3. 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만, 
       값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략한 수 있다.

     

    반응형
    LIST

    댓글