[java] 형변환

seokki kwon·2022년 10월 2일
0

자바에서 형변환 하는법을 알아보자

기본적으로 묵시적인 형변환, 명시적인 형변환 두가지의 형변환이 있다
간단하게 요약하자면

  • 작은바이트에서 큰바이트로 갈떄
  • 덜명확한 타입에서 명확한 타입으로 갈떄

묵시적인 형변환이 가능하다


package binary;

public class ImplicitConversion {

	public static void main(String[] args) {
		// 묵시적 형변환
		byte bNum = 10;
		int num = bNum;
		
		System.out.println(num);
		
		
		long lNum = 10;
		float fNum = lNum;
		
		System.out.println(fNum);
		
		
		double dNum = fNum + num;
		System.out.println(dNum);
		
		// 명시적인 형변
	
	}

}

bNum 에서 num 으로의 변환은 byte => int 이다
lNum 에서 flaot 으로의 변환은 정수 => 실수 이

fNum 과 num 을 더한값을 dNum 으로
정수타입에서 실수타입으로 형변환하는 경우이다

명시적인 형변환

package binary;

public class ExplicitConversion {

	public static void main(String[] args) {
		int iNum = 1000;
		byte bNum = (byte)iNum;
		
		System.out.println(iNum);
		System.out.println(bNum);
		
		double dNum = 3.14;
		iNum = (int)dNum;
		float fNum = 0.9F;
		System.out.println(iNum);
		
		int num1 = (int)dNum + (int)fNum;
		int num2 = (int)(dNum+ fNum);
		
		System.out.println(num1);
		System.out.println(num2);
	}
}

명시적인 형변환의 경우이다
iNum 에서 byte 형식의 변수로 저장을 하려고 할경우 iNum은 더큰 byte를 차지하는
타입이기 때문에 별도로 타입캐스팅을 해줘야한다.

하지만 bNum을 콘솔에 찍어보면 1000이 나오지 않는다

8비트 까지밖에 포함을 못하므로 데이터가 유실된것이다 이런것을 truncate 됬다고 한다.

두번째 케이스를 보면
double 타입을 int 타입에 저장하기 때문에 따로 int로 타입캐스팅을 해주었다.

	int num1 = (int)dNum + (int)fNum;
		int num2 = (int)(dNum+ fNum);
		
		System.out.println(num1);
		System.out.println(num2);

num1 과 num2 는 결과값이 각각 다르다
연산과정에서 차이를 알수있다
num1 의 경우 실제로 연산이 될때 3 + 0
fNum 이 0이 나오는 이유는 0.9는 int로 형변환이 되면서 소수점 자리가 truncate 된다.

num2의 경우 우선순위에 의해서 3.14 + 0.9 = 4.04
4.04 를 int 형으로 타입캐스팅 하기때문에 4라는 결과값이 나오게 된다.

profile
웹 & 앱개발 기록

0개의 댓글