Dev/Java

Java - 형변환 ( TypeCasting )

surimi🍥 2020. 8. 10. 16:42
반응형
package day01;
// 형변환(typecasting)
// 형변환이란 특정 변수의 값 데이터타입을 강제로 변경해주는 것을
// 형변환이라고 한다.

// 형변환에는 2가지 종류가 있다.

// 1. 암시적 형변환(implicit typecasting)
//    암시적 형변환의 경우 더 큰 데이터타입에 더 작은 데이터타입의 값을 담아줄 때
//    자동으로 발생한다.
//    또한 정수형의 값을 실수형으로 변환할 때도 자동으로 발생한다.
//    이때는 우리가 별다른 명령어를 적어주지 않아도 자바가 알아서 해준다.

// 2. 명시적 형변환(explicit typecasting)
//    명시적 형변환의 경우 더 작은 데이터타입에 더 큰 데이터타입의 값을 담아줄 때
//    우리가 명시적으로 형변환하라고 명령어를 적어주어야 한다.
//    또한 명시적 형변환의 경우 더 작은 데이터타입이 표현할수 있는 범위를 넘어서면
//    overflow나 underflow가 발생할 수도 있다.

//    overflow: 값이 최대표현값을 넘어서서 오히려 최소값으로 가는 현상
//    underflow: 값이 최소표현값을 넘어서서 오히려 최대값으로 가는 현상

public class Ex11TypeCasting {
	
	public static void main(String[] args) {
		
		byte myByte = 20;
		int myInt = myByte;
		
		//위의 코드에서는 암시적 형변환이 발생했다.
		// myByte와 myInt의 자료형은 다르지만
		// myInt는 32비트, myByte는 8비트 이기 때문에
		// 아무런 문제없이 myByte의 값을 int로 변환 가능하다.
		
		System.out.println("myInt의 현재값 : "+myInt);
		
		//오버플로우 혹은 언더플로우가 발생하지 않는 명시적 형변환을 사용해보자.
		//명시적 형 변환을 하는 방법은
		// 저장할 변수 = (저장할 변수의 자료형)바꿀 값;
		
		myInt = 80;
		myByte = (byte)myInt;
		
		System.out.println("myByte의 현재값 : "+ myByte);
		
		//byte의 표현 범위는 -128부터 +127까지이기 때문에
		//80을 byte로 바꾸어도 아무런 문제가 발생하지 않는다!
		
		
		//overflow 경험해보기
		
		myInt = 128;
		myByte = (byte)myInt;
		
		System.out.println("myByte의 현재값 : "+ myByte);
		
		//underflow 경험해보기
		
		myInt = -130;
		myByte = (byte)myInt;
		
		System.out.println("myByte의 현재값 : "+ myByte);
		
		//명시적 형변환을 우리가
		// int / int의 결과값을 double로 출력하고 싶다면 그때도 사용해야한다.
		
		double mydouble = 3 / 5;
		System.out.println("mydouble의 현재값: " + mydouble);
		
		//위의 코드는 우리가 원하는 0.6이라는 값 대신 0.0이 나온다.
		//왜냐면 int / int 가 되어서 결과값이 0이고 이 결과값 0 이 실수로 바뀌어 0.0이 되기 때문이다.
		//그렇다면 우리가 원하는 0.6이라는 값을 받기 위해서는 int / int가 아닌 
		// int / double이 실행되어야 한다.
		// 이럴때 int를 형변환 해서 double로 바꿔주면 된다!
		
		mydouble = 3 / (double)5;
		System.out.println("mydouble의 현재값: " + mydouble);
	}
}
더보기

myInt의 현재값 : 20
myByte의 현재값 : 80
myByte의 현재값 : -128
myByte의 현재값 : 126
mydouble의 현재값: 0.0
mydouble의 현재값: 0.6

반응형

'Dev > Java' 카테고리의 다른 글

Java - 제어문 ( If )  (0) 2020.08.11
Java - 하드코딩 ( HardCoding )  (0) 2020.08.10
Java - 입력 ( Scanner )  (0) 2020.08.10
Java - 출력 ( printf )  (0) 2020.08.10
Java - 출력 ( Print )  (0) 2020.08.10