Java_02_Variable(변수)/D_Cast(형변환)

z_uiw·2022년 5월 11일
0

Java

목록 보기
5/6

형변환 : 값의 자료형을 바꾸는 것

컴퓨터 내부에서의 값 처리 규칙

    1. 대입 연산자를 기준으로 왼쪽과 오른쪽은 같은 자료형이여야된다.
      => 즉, 같은 자료형에 해당하는 값만 대입이 가능함
      ( 다른 자료형의 값을 대입하고자 한다면 형변환이 필수)
      자료형 변수명 = (자료형)값;
    1. 같은 자료형끼리만 연산이 가능 => 연산 결과 또한 같은 자료형으로 나옴
      값 + (자료형)값

형변환의 종류

    1. 자동형변환 : 자동으로 형변환이 진행되기 때문에 개발자가 직접 형변환을 시킬 필요없음
    1. 강제형변환 : 자동형변환이 안되서 우리가 직접 형변환을 해줘야됨

      [주의사항]
      boolean은 형변환이 불가함

자동형변환

자료형이 다른 두 값 간의 연산(대입, 계산)시 자동으로 값의 범위가 작은 자료형을 큰 자료형으로 변환하여 처리해준다.

강제형변환

큰 범위의 자료형을 작은 범위의 자료형으로 변환시키는 것
실수값을 정수형으로 강제형변환시 소수점 아래 부분은 버려짐 (* 데이터 손실이 발생할 수 있음)

D_Cast

package com.br.variable;

public class D_Cast {

	public void autoCasting() {
		
		// 1. int(4byte) => double(8byte)
		int i1 = 12;
		double d1 = /*(double)*/i1; // 12 => 12.0
		System.out.println("d1 : " + d1);
		
		int i2 = 12;
		double d2 = 3.3;
		
		double result = /*(double)*/i2 + d2; // 12 + 3.3 => 12.0 + 3.3 => 15.3
		System.out.println("result : " + result);
		
		// 2. int(4byte) => long(8byte)
		int i3 = 1000;
		long l3 = i3;
		
		long l4 = 10000/*L*/; 
		
		// 3. float(4byte) => double(8byte)
		float f5 = 1.0f;
		double d5 = /*(double)*/f5;
		
		// ===== 특이 케이스 =====
		// 4. long(8byte) => float(4byte)
		long l6 = 100000L;
		float f6 = l6;
		// float이 실수형이기 때문에 long형보다 표현 가능한 수의 범위가 더 크다.
		
		// 5. char(2byte) <=> int(4byte)
		int num = /*(int)*/'A';
		System.out.println("num : "+ num);
		
		char ch = /*(char)*/60;
		System.out.println("ch : "+ ch);
		
		// char에는 음수값 저장 불가능 => 값의 범위가 0 ~ 65535
		
		// 6. byte 또는 short간의 연산
		byte b1 = 1;
		byte b2 = 10;
		
		//byte b3 = b1 + b2; // 에러발생 => byte나 short는 연산시 무조건 int형으로 취급
							 // 			연산 결과가 범위가 더 큰 int형임 => byte형에 대입 불가
		
		byte b3 = (byte)(b1 + b2); // "강제형변환" 하면 저장 가능
		
		
	}
	
	public void forceCasting() {
		// 강제형변환 : 큰 범위의 자료형을 작은 범위의 자료형으로 변환시키는 것

		// double(8byte) => float(4byte)
		double d1 = 4.0;
		float f1 = (float)d1;
		
		// double(8byte) = > int(4byte)
		int iNum = 10;
		double dNum = 5.89;
		
		//int iSum = iNum + dNum; // 10 + 5.89 => 10.0 => 5.89 => 15.89 (double)
										 // 연산결과인 double형이 int형 변수에 대입 불가
		
		// 해결방법 1. 연산결과를 int형으로 강제형변환 후 담기
		int iSum1 = (int)(iNum + dNum); // (int)15.89 => 15
		System.out.println("iSum1 : " + iSum1);
		
		// 해결방법 2. double형 값 하나만 int형으로 강제형변환
		int iSum2 = iNum + (int)dNum; //10 + 5 => 15
		System.out.println("iSum2 : " + iSum2);
		
		// 실수값을 정수형으로 강제형변환시 소수점 아래 부분은 버려짐 (* 데이터 손실이 발생할 수 있음)
		
		// 해결방법 3. 연산결과를 아싸리 double형 변수에 대입
		double dSum = iNum + dNum;
		System.out.println("dSum : " + dSum);
		
		
		
	}
	
	
	
	
	
}
profile
개발을 합니다.

0개의 댓글