정리 노트/꿈날개_JAVA_기초

8. 형 변환과 오버플로우 (변수 실습②,③)

우주바다 2023. 2. 7. 22:30
728x90

불리언 제외 7개의 기본형은 서로 변환 가능하다.
그러나 더 작은 단위로 형 변환하면 데이터가 손실된다.
그럼에도 강행하는 경우를 강제 형 변환이라 한다.

package prac_01;

public class Var_02 {
	public static void main(String[] args) {
		
		int askii = 65;         		
		String result_1 = Integer.toString(askii); 
		System.out.println(result_1);
		System.out.println(result_1.getClass());
		
		//더 작은 단위로 강제 변환할 때는 (자료형)으로 명시.
		float fnum = 1.23f;
		// int result_2 = fnum;      오버플로우 에러 
		int result_2 = (int)fnum;  // 강제 형변환 
		System.out.println(result_2); // 1 (데이터 손실)
		
		byte b = 10;
		int i = b;  // (int) 생략 가능
		System.out.println(i);		
		
		int ii = 300;
		byte bb = (byte)ii; // 생략 불가능
		System.out.println(bb);	
	}
}

byte b = 127;
byte b = 128;   // 에러

  
위의 에러 코드가 
int b = 128; 이렇게 작성한 것 처럼 ide나 상황에 따라, 

더 높은 단위로 오토 캐스팅(자동 형변환)되는 경우도 있음.

b = (byte)(b + 1);

 

: 위와 같은 경우 1을 더해서 128이 될 것 같지만 범위를 넘었기 때문에
  이어서 루프를 돌아 시작 지점부터 카운트. 
  따라서  -128이 된다. ( 최소값 -128 ~  최대값 127  범위이므로.)


package prac_01;

public class Var_03 {
	public static void main(String[] args) {
		
		byte b1 = 127;          
		// byte b2 = b1 + 2;   오버플로우
		// byte b2 = (byte)b1 + 2; 오류.강제형변환이 b1에만 적용되기 때문
		byte b2 = (byte)(b1 + 1); //형변환 대상을 하나로 묶음.
		System.out.println(b1);
		System.out.println(b2); // 범위 끝 127 ~ 시작점 -128으로 루프.
		
		int i2 = 100;
		float f1 = (float)i2; 
		System.out.println("int to float: " + f1); // 100.0
		
		float f2 = 10.55f;
		int i3 = (int)f2;
		System.out.println("float to int: " + i3); // 데이터 손실 
		
		char ch = 'a';
		int i4 = ch;
		System.out.println(i4); // 97

		int i5 = 65; 
		char ch2 = (char)i5; // A
		System.out.println(ch2);
		
		// any type + "" = 문자열(String) 변환
		// String str = (String)i5; //변환수식 사용 불가. 
		String str = "" + i5;
		System.out.println(str); // 문자열 65
		System.out.println(str.getClass());		
	}
}

같이 보면 좋은 글

728x90
반응형