JAVA chapter 02. 변수와 타입. 


2.3 타입 변환


2.3.1 자동 타입 변환

// 표현할 수 있는 값의 범위가 float가 더 크므로 int와 long보다 더 큰 타입으로 표시


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package sec03.exam01_promotion;
public class PromotionExample {
    public static void main(String[] args) {    
        byte byteValue = 10;
        int intValue = byteValue; // int(4) <- byte(1)
        System.out.println(intValue);
 
        char charValue = '가';
        intValue = charValue; // int(4) <- char(2)
        System.out.println("가의 유니코드=" + intValue);
        
        intValue = 500;
        long longValue = intValue; // long(8) <- int(4)
        System.out.println(longValue);        
        
        intValue = 200;
        double doubleValue = intValue; // double(8) <- int(4)
        System.out.println(doubleValue);        
    } 
}
cs


2.3.2 강제 타입 변환 (Casting)






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package sec03.exam02_casting;
public class CastingExample {
    public static void main(String[] args) {    
        int intValue = 44032;
        char charValue = (char) intValue;
        System.out.println(charValue);
        
        long longValue = 500;
        intValue = (int) longValue;
        System.out.println(intValue);
        
        double doubleValue = 3.14;
        intValue = (int) doubleValue;
        System.out.println(intValue);    
    } 
}
cs



// 강제 타입 변환에서 주의할 점은 사용자로 부터 입력받은 값을 변활할 때 값의 손실이 발생하면 안된다는 것이다.

// 강제 타입 변환을 하기 전에 우선 안전하게 값이 보존될 수 있는지 검사하는 것이 좋다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package sec03.exam02_casting;
public class CheckValueBeforeCasting {
  public static void main(String[] args) {
      int i = 128;
      
      if( (i<Byte.MIN_VALUE) || (i>Byte.MAX_VALUE) ) { // if( (i<-128)||(i>127)과 동일 )
          System.out.println("byte 타입으로 변환할 수 없습니다.");
          System.out.println("값을 다시 확인해 주세요");
      } else {
          byte b = (byte) i;
          System.out.println(b);
      }
  }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
package sec03.exam03_accuracy;
public class FromIntToFloat {
    public static void main(String[] args) {
        int num1 = 123456780;
        int num2 = 123456780;
        
        float num3 = num2; // 1234567890은 23비트로 표현할 수 없기 때문에 근사치로 변환된다. 즉, 정밀도 손실이 발생한다
        num2 = (int) num3;
        
        int result = num1 - num2;
        System.out.println(result);
    }
}
cs



2.3.3 연산식에서의 자동 타입 변환


// 자바는 정수 연산일 경우 int 타입을 기본으로 한다. 

// 그 이유는 피연산자를 4byte 단위로 저장하기 때문에 크기가 4byte보다 작은 타입(byte, char, short)은 4byte인 int 타입으로 변환된 후 연산이 수행된다.


// 피연산자 중 하나가 long 타입이라면 다른 피연산자도 long 타입으로 자동 타입 변환되고, 연산의 결과는 long 타입이 된다.


// 피연산자 중에 실수 리터럴이나, double 타입이 있다면 다른 피연산자도 double 타입으로 자동 타입 변환되어 연산하므로 결과는 double 타입으로 산출된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package sec03.exam04_operation;
public class OperationsPromotionExample {
    public static void main(String[] args) {    
        byte byteValue1 = 10;
        byte byteValue2 = 20;
        //byte byteValue3 = byteValue1 + byteValue2;   //컴파일 에러
        int intValue1 = byteValue1 + byteValue2;
        System.out.println(intValue1);
        
        char charValue1 = 'A';
        char charValue2 = 1;
        //char charValue3 = charValue1 + charValue2;   //컴파일 에러
        int intValue2 = charValue1 + charValue2;
        System.out.println("유니코드=" + intValue2);
        System.out.println("출력문자=" + (char)intValue2);
        
        int intValue3 = 10;
        int intValue4 = intValue3/4;
        System.out.println(intValue4);
        
        int intValue5 = 10;
        //int intValue6 = 10 / 4.0;   //컴파일 에러
        double doubleValue = intValue5 / 4.0;
        System.out.println(doubleValue);
    } 
}
cs




Posted by 너래쟁이
: