Java - 형변환

2020. 8. 18. 22:21Java/Java

반응형

자바에서는 규칙에 따라서 자료형을 변환할 수 있다.

 

크게  자동형변환, 강제형변환  두 가지 방법이 있다. 

 

1. 자동 형변환자동형변환(=묵시적인 형변환) 소--->대

            1) 값을 저장시
            2) 계산중간에(=연산할때) 자동으로 바뀌는 경우

 

자료형의 크기 비교 => 소========================>대
                               byte->short->int->long->float->double
                                        char
                               소=======================> 대   자동형변환 방향

ex)

    int+double=>double+double
      3+5.7===>3.0+5.7=8.7

 

boolean은 형변환X (배제)

 

 

2.강제형변환(=명시적인 형변환)  
=>명확하게 형변환을 표시해줘야 된다.
      형식)  (변환시킬 자료형)변수명
 
  ex) float f=3.5; //double (8)    float f=(float)3.5;
        4       3.5f

 

 

public class Op5Cast {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        System.out.println("자동 형변환");//p61
        //1. 적은데이터가 큰 데이터공간에 저장->자동으로 형변환(메모리 낭비 심하다)
        //1  4 8 16 32 64 128
        //byte s=12;                     00001100
        short s=12;  // 00000000 00001100
        int n=s; //00000000  00000000 00000000 00001100
        //2.계산 중간에 자료형이 변환
        char c='A'; //65
        int n2=c+1; //char(2byte)+int(4byte)=>int(65)+int(1)=66
        System.out.println("n2=>"+n2);
        //int(4) ->char(2)
        System.out.println("(char)n2=>"+(char)n2);//명시적인 형변환
        //명시적인 형변환=>단점=>데이터 손실이 일어날 수 있다.
        int su=(int)3.5;
        System.out.println("su=>"+su);
        
        int x=123;
        float y=x+12.3f;//int+float=>float+float=>123.0f+12.3f
        System.out.println("y=>"+y);
        
        byte s2=12;  short s3=45;
        System.out.println("형변환 주의할점");
        int re=s2+s3;//byte+short=>short+short=>int(연산의 기본 자료형은 int)
        //int +float or double=>float,double로 변환
        //byte,short==>int 범위내에 존재=>int
        short re2=(short)(s2+s3);//수식의 경우에는 (  )로 묶어줄것.
        System.out.println("re=>"+re);
        System.out.println("re2=>"+re2);
	}
}

 

 

문자 -> 숫자 자동 형변환시 IllegalFormatConversionException 발생

 

문자=>숫자로 자동으로 변환이 안되서 발생된 예외처리 클래스이다. (문자는 숫자로 자동형변환이 안된다. => char을 int로 강제형변환 해야 함)

 

public class Op6Cast2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num1=20,num2=30;
		//printf(출력양식,,,출력할 대상자)->%d(정수값),%c(문자),%s(문자열),%f(소수점)
		System.out.printf("첫번째 숫자=%d,두번째 숫자=%d",num1,num2);
		System.out.println();//줄바꿈 역할
		System.out.print('\n');//특수기호를 이용해서 줄바꿈
		System.out.println("첫번째 숫자="+num1+",두번째 숫자="+num2);
		//형변환
		char ch='A';
		System.out.printf("문자 %c의 유니코드 값은 %d\n",ch,(int)ch);//문자 강제형변환
		//-------------------------------------------------------------------
		int ch2=ch; //char->int으로 변환 ->문자에 해당되는 아스키코드값으로 저장
		System.out.println("ch2=>"+ch2);
		//종합문제
		int java=90,jsp=85,oracle=70;
		//총점
		int sum=java+jsp+oracle;
		System.out.printf("sum=%d입니다", sum);
		System.out.println();
		//평균
		int avg=sum/3; //소수점이 있어도 버리고 정수만 계산(int)
		double avg2=sum/3; //81.0
		System.out.println("avg=>"+avg+",avg2=>"+avg2);
		//소수점이 나오는 계산=>정밀한 값 그대로 저장->double형으로 형변환
		double avg3=(double)sum/3; 
		System.out.println("avg3=>"+avg3);
		//형식)%f->%.소수점자리수f->%.2f
		System.out.printf("평균(avg3):%.2f",avg3);
	}
}

 

반응형