본문 바로가기
국비지원/JAVA

[JAVA] 2-3. 형변환과 데이터크기 & casting

by cosmog 2022. 9. 22.
반응형
형변환과 데이터크기
		//형변환과 데이터의 크기
		System.out.println("A" + 10); //A10
		System.out.println('A' + 10);
        
		System.out.println((char)('A' + 10));
결과값
A10
75

K

'A'에 10을 더한값이 75가 나온다.

75인이유 = char + int 는 int , char형으로 보고 싶다면 캐스팅 진행해야한다.

casting하면 K값이 나온다.

 

  • 작은 타입의 경우 큰타입에 그냥 넣어도 상관 없다.
    • int a = byte값을 넣을 수 있다.
  • 반대의 경우에는 X => 형변환이 필요하다(casting)
    • byte b = (byte)a; -> casting 작업이 필요하다.
    • 캐스팅 작업을 잘 하려면 type의 크기를 잘 알고 있어야 한다.
      • 실수형은 무조건 정수형보다 크다.
      • byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
      • float이 long보다 큰 타입인 이유는 표현할 수 있는 값의 경우의 수가 float이 더 크기 때문이다.
casting

1.  casting이 필요 없는 코드 (자동변환)

public class CastingEx01 {

	public static void main(String[] args) {

		byte b = 10;
		int s = b; // byte < int형으로 자동형변환 (문제없음)
		short i = b; // byte < short형으로 자동형변환
		long l = b; // byte < long

		char c = '가';
		int j = c; // char < int 문제없음. 자동변환
		System.out.println("'가'의 유니코드 숫자값: " + j);

		int k = 1000;
		double d = k; //int < double
		System.out.println(d);
	}
}
결과값
'가'의 유니코드 숫자값: 44032
1000.0

2.  casting이 필요한 코드 

		/*
		 * 크기가 큰 타입을 작은 타입으로 변환할때 (type) 캐스팅을 이용해서
		 * 명시적 형변환을 해야합니다. 
		 */
		
		int i = 70;
		//char c = i; error:cannot convert from int to char
		char c = (char)i;
		short s = (short)i;
		System.out.println("c:" + c + " s:" +s);
		
		double d = 3.14;
		int k = (int)d; 
		
		System.out.println("k:" + k);
결과값
c:F s:70
k:3

casting할때 주의 할 점 

  • 해당 값을 받을 수 없는 범위가 들어오면 잘려나가고, 쓰레기값이 저장될 수 있다.
		/*
		 * 캐스팅을 할때 주의 할 점!
		 * 해당 값을 받을 수 없는 범위가 들어오면 잘려나간다.
		 * 즉, 쓰레기값이 저장된다.
		 */
		
		int a = 1000;
		byte b = (byte)a;
		//byte는 1000의 값을 가질 수 없다. 128까지 가능이니까. 쓰레기값이 들어간다.
		//1000이 (바이너리값 0011 1110 1000임. byte니까 앞부분이 잘려서 1110 1000만 사용) = -24 
		System.out.println("b:" + b);
결과값
b:-24

 예외적인 casting

		/*
		 * 예외적인 casting case
		 * char, short는 크기가 같지만
		 * 문자형과 숫자형이기 때문에, 형변환이 필요하다.
		 */
		char cc = 'A';
		short ss = (short)cc;
		
		System.out.println(ss);

casting의 법칙

  • 다른 타입의 데이터 연산을 진행할 경우, 큰 데이터 타입을 가진 쪽에 맞춰 형변환되어 연산을 진행한다.
  • int보다 작은 데이터 타입의 연산은 무조건 int로 형변환이 된다.
반응형