공부 중 메모/JAVA

2. JAVA의 형변환

라이피 (Lypi) 2022. 3. 15. 15:26
반응형

1. 자바의 정수 자료형은 byte < short < int < long 의 크기 관계를 갖는다.

2. 실수 자료형은 flaot < double의 크기 관계를 갖는다.

3. 같은 유형끼리는 크기가 큰 자료형에 작은 자료형을 넣을 수 있다. (묵시적 형변환이 일어난다.)

4. 실수에 정수를 대입할 수 있다.

5. 하지만 정수에 실수를 묵시적 형변환으로 대입할 수는 없다. 

6. char형은 byte와 short을 제외한 정수,실수형 자료형에 대입할 수 있다.

7. 하지만 char형에 정수나 실수형을 묵시적으로 대입할 수는 없다. 

 

8. 명시적형변환을 하면 크기가 작은 자료형에 크기가 큰 자료형도 넣을 수 있다.

9. 하지만 데이터의 손실이 일어날 가능성이 있다.

 

10. bool형은 다른 자료형에 명시적으로도 대입할 수도 없고, 다른 자료형이 bool형에 대입되지도 않는다.

 

public class TypeConversion {
    public static void main(String args[]) {
        /* 묵시적 형변환
        같은 유형의 자료형끼리 대입할 경우 작은 것은 큰 것에 넣을 수 있지만,
        큰 것은 작은 것에 넣을 수 없다. */

        //자바의 정수형 4가지는 byte가 제일 작고, long이 제일 크다.
        byte b = 0; short s = 0; int i = 0; long l = 0;
        
        l = i; l = s; l = b; i = s; i = b; s = b; //가능
        /* Type mismatch: cannot convert from short to byte
        b = s; b = i; b = l; s = i; s = l; i = l; */

        float f = 0.0f; double d = 0.0;

        d = f; //가능
        /* Type mismatch: cannot convert from double to float
        f = d; */

        //실수형에 정수형을 대입시 자동으로 형변환이 일어난다.
        d = l; f = l; 
        /* 하지만 그 반대는 일어나지 않는다.
        l = d; */
        
        char c = 'a';

        //문자형은 unsigned int 취급을 받으므로 크기적으로 int 형과 같다.
        d = c; f = c; l = c; i = c; 
        
        /* 그러므로 byte나 short으로는 변환되지 않는다.
        s = c; b = c; */
        
        /* 정수나 실수를 char형으로도 변환되지 않는다.
        c = b; c = s; ... c = d; */

        /* 그렇다면 명시적 형변환은 어떨까? 
        자료의 손실을 감안해야하지만 대부분 가능하다.*/
        b = (byte)l; 

        /* 심지어 double을 byte에 대입하거나 char를 byte에 대입할 수도 있다. */
        b = (byte)d; b = (byte)c; 
        
        boolean bool = true;
        /* boolean type은 다른 type과 호환되지 않는다. 
        bool = b; b = bool; */

        /* boolean type은 명시적으로 형변환을 해도 다른 type과 호환되지 않는다. 
        b = (byte)bool; bool = (boolean)b; bool = (boolean)i; */
    }
}
반응형