값(Data)의 자료형을 바꾸는 것 (boolean 제외)
형변환은 왜 필요할까 ?
컴퓨터는 기본적으로 같은 자료형끼리만 연산이 가능함
다른 자료형과 연산 시 오류 발생
→ 이런 상황을 해결하기 위해 필요한 기술이 형변환 !
컴퓨터의 값 처리 원칙
→ 이러한 원칙이 지켜지지 않은 경우에 형변환이 필요함
( 값의 범위가 큰 자료형과 값의 범위가 작은 자료형의 연산 시 )
컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환
int num1 = 10;
double num2 = 3.5;
System.out.println("자동 형변환 결과 : " + (num1 + num2));
// 자동 형변환 결과 : 13.5
// 원래 에러가 발생해야 하지만 "자동 형변환" 덕분에 발생하지 않음
* 단, byte와 short자료형 값의 계산 결과는 무조건 int로 처리한다.
기존 자료형을 원하는 자료형으로 강제 변환시키는 것
- 값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환할 때
- 출력되는 데이터의 표기법을 변환시키고 싶을 때
⁎ 강제 형변환 시 데이터 손실이 발생할 수 있음 → 데이터의 변형, 손실을 감수하고 강제 변환
double temp = 3.14;
int num = (int)temp;
System.out.println("temp : " + temp); // temp : 3.14
System.out.println("num : " + num); // num : 3
// 실수 -> 정수형 변환 시 소수점 버림 처리(데이터 손실)
// char -> int 강제 형변환
char ch = 'A'; // 65
System.out.println((int)ch); // 65
// int -> char 강제 형변환
int iNum3 = 44085;
System.out.println((char)iNum3); // 갵
// int -> byte 강제 형변환
int iNum = 290;
byte bNum = (byte)iNum;
System.out.println(iNum); // 290
System.out.println(iNum); // 34
같은 정수형 끼리의 변환 시에도 값의 범위 차이 때문에 데이터 손실 발생 !
int i6 = 2147483647; // int의 최대값
int result6 = i6 + 1;
System.out.println(result6); // -2147483648
오버플로우 현상은 컴퓨터가 미리 예측할 수 없기 때문에
개발자가 미리 예측해야 함 !
선언 및 초기화된 5개의 변수를 가지고
알맞은 사칙연산(+, -, *, /)과 형변환을 이용하여
주석에 작성된 값과 같은 결과가 나타나도록 코드를 완성하세요.
int iNum1 = 10;
int iNum2 = 4;
float fNum = 3.0f;
double dNum = 2.5;
char ch = 'A';
System.out.println( iNum1 iNum2 ); // 2
System.out.println( dNum ); // 2
System.out.println( iNum2 dNum ); // 10.0
System.out.println( iNum1 ); // 10.0
System.out.println( iNum1 iNum2 ); // 2.5
System.out.println( dNum ); // 2.5
System.out.println( fNum ); // 3
System.out.println( iNum1 fNum ); // 3
System.out.println( iNum1 fNum );// 3.3333333
System.out.println( iNum1 fNum ); // 3.3333333333333335
System.out.println( ch ); // 'A'
System.out.println( ch ); // 65
System.out.println( ch iNum1 ); // 75
System.out.println( (ch iNum1) ); // 'K'
풀이 ⬇️
System.out.println( iNum1 / iNum2 ); // 2
System.out.println( (int)dNum ); // 2
System.out.println( iNum2 * dNum ); // 10.0
// 자동형변환
// 4.0 * 2.5 = 10.0
System.out.println( (double)iNum1 ); // 10.0
System.out.println( iNum1 / (float)iNum2 ); // 2.5
System.out.println( dNum ); // 2.5
System.out.println( (int)fNum ); // 3
System.out.println( iNum1 / (int)fNum ); // 3
// 3.0f -> 3
// 10 / 3 -> 3
System.out.println( iNum1 / fNum );// 3.3333333
// float : 소수점 아래 8번째 자리까지 연산 후 반올림
System.out.println( iNum1 fNum ); // 3.3333333333333335
// double : 소수점 아래 16번째 자리까지 연산 후 반올림
System.out.println( "'" + ch + "'" ); // 'A'
System.out.println( (int)ch ); // 65
System.out.println( ch + iNum1 ); // 75
// 65 + 10 -> 75
System.out.println( "'" + (char)ch + iNum1) + "'" ); // 'K