JAVA/기본 이론

JAVA | 형 변환(Type Casting)

로아다 2023. 2. 21. 00:39
728x90
반응형
타입 크기순 (실수 타입은 무조건 정수 타입보다 크다.)

byte < short = char < int < long(8) < float(4) < double

 

- 큰 타입에 작은 타입의 값을 넣을 때는 타입이 자동으로 변환된다.

(자연스러운 타입 캐스팅)

 

- 작은 타입에 큰 타입의 값을 넣을 때는 강제 타입 캐스팅이 필요하다.

(값이 손상될 우려가 있지만 개발자가 직접 입력했으므로 책임진다는 뜻)

 


  • 큰 타입에서 작은 타입으로 변할 때는 데이터 손상이 발생할 수 있기 때문에 그냥은 넣을 수 없고 강제 형 변환(타입 캐스팅)이 필요하다.
public class A05_TypeCasting {
	public static void main(String[] args) {
		byte b1 = 127;
		short s1 = b1;
		
		b1 = (byte)s1;	// short -> byte 형 변환 
	}
}

 


 

  •  큰 타입에서 작은 타입으로 강제 형변환하여 값이 이상해지는 경우
public class A05_TypeCasting {
	public static void main(String[] args) {
		byte b1 = 127;
		short s2 = 31333;
		
		b1 = (byte)s2;
		
		System.out.println("s2 : " + s2);
		System.out.println("s2를 형 변환 한 b1의 값 : " + b1);
		
		
		double d1 = 123.12345678912345;
		float f1 = (float)d1;
		
		System.out.println("d1 : " + d1);
		System.out.println("d1을 형 변환 한 f1의 값 : " + f1);

	}
}

결과

 


  •  실수 타입은 소수점 아래 값이 소실될 위험이 있으므로 정수 타입에 들어갈 때 항상 타입 캐스팅이 필요하다.

 

public class A05_TypeCasting {
	public static void main(String[] args) {
		float f1 = 123.123f;
		long l1 = (long)f1;
		
		System.out.println("l1의 값 : " + l1);

	}
}

결과

 


  • short, char 모두 2byte 지만 short에는 음수 값이 존재할 위험이 있으므로 타입 캐스팅이 필요하다.
public class A05_TypeCasting {
	public static void main(String[] args) {
		short s1 = -123;
		char c1 = (char)s1;
		
		System.out.println(c1);

	}
}

결과

 


 

  • char타입에는 short의 범위를 넘어가는 양의 정수가 있을 수 있으므로 타입 캐스팅이 필요하다.

public class A05_TypeCasting {
	public static void main(String[] args) {
		char c1 = 61000;
		short s1 = (short)c1;
		
		System.out.println(s1);

		int ch1 = 'A'; // A : 65
		char ch2 = (char)ch1;
		
		System.out.println(ch1); // int 타입
		System.out.println(ch2); // char 타입

	}
}

 

728x90
반응형