현재

타입 캐스팅(Type Casting) 본문

Java/문법들

타입 캐스팅(Type Casting)

AAAge 2023. 9. 11. 22:36

데이터 타입이 일치하지 않으면 Syntax오류가 발생하므로 주의 해야한다.

타입을 맞춰주기 위해서 강제 타입 캐스팅을 하는데 값을 변경하면서 오류가 발생한다.

여기서 궁금했던 점은 작은값을 큰값으로 옮기는데는 메모리가 부족하니까 당연히 오류가 발생하지만

왜 큰 값에서 작은 값으로 옮길때도 오류가 발생하는지 찾아봤다.

 

찾아보니 타입 캐스팅이 단순히 메모리 공간에서 맨 왼쪽의 값을 버리는걸로 진행되는게 아니라 조금 더 복잡한 일련의 과정이 있기 때문에 오류가 난다는 것을 알게 되었다. (지금은 아직 공부할게 많아서 이 정도까지만 알고 넘어가기로 했다.... 나중에 더 자세히 찾아볼 기회가 있으면 좋겠다.)

public class P2 {

	public static void main(String[] args) {
		byte a1 = 10; // Data type이 일치하지 않으면 대부분 Syntax 오류가 발생한다.
		double a3 = 0.1; // 
//		int a2 = a3; // Type miss match 라고 부른다.
		int a2 = a1; // byte를 int로 type casting(묵시적)해서 넣어준다.
		int a4 = a2; // int에 int 대입이라 정상
		
//		byte a5 = a4; // Type miss match, byte를 int에 넣는거
		byte a5 = (byte)a4; // 강제 타입 캐스팅(명시적)
		// 사실상 - 명시적 타입 캐스팅을 해야하는 경우는 값의 증발이 발생
		// 왼쪽에 있는 큰 bit를 버린다(오류가 커지니까 일부러 발생시키는 버그가 아닌이상에는쓰지않는다)
		
		double b1 = a4; // 타입 캐스팅 발생! 작은수를 큰수에 넣으니까.
		double b2 = (double)a4;
		
		double b3 = 10; // 10.0까지 안써주면 type casting 발생했음
		
		int b4 = '안';
//단위는 전부 bit이다.
//char(1)<byte(8)<short(16)<int(32)<=float(32)<double(64)<=long(64)
		
		double c1 = 10.1;
		int c2 = (int)c1; // 무조건 자름 결과값 c1 = 10으로 저장
		
		char d1 = 'A';
		System.out.println(d1); // 어떤 타입이건 다 넣을수 있다. 해당타입에걸맞는출력
		System.out.println((int)d1); 
		
		int d2 = 100;
		System.out.println(d2);
		System.out.println((char)d2); // char = 'a' -> 97
		
	}

}

'Java > 문법들' 카테고리의 다른 글

기초 문법( + 예제 )  (0) 2023.09.28
Java의 특징  (0) 2023.09.19
증감 연산자  (0) 2023.09.11
리터럴, 진법들  (0) 2023.09.11
변수 타입의 종류들(기본 타입, 참조 타입)  (0) 2023.09.11