💡변수 또는 리터럴을 다른 타입으로 변환하는 것 형변환 하는 이유 : 프로그램에서 변수에 값을 넣거나 연산을 수행할 때는 같은 타입끼리만 가능하기 때문
1-2. 형변환의 종류 및 규칙
1-2-1. 자동 형변환 (묵시적 형변환)
💡컴파일러가 자동으로 수행해주는 타입 변환이다. 데이터 손실 가능성이 없는 경우 자동으로 타입을 맞춰줌.
역방향은 자료형 데이터 손실 발생!char형은 양수만 되기 때문에 int에서 형변환 불가!!
package com.ohgiraffers.section05.typecasting;
public class Application1 {
public static void main(String[] args) {
/* 수업목표. 자동 형변환(Implicit Coercion) 규칙에 대해 이해할 수 있다. */
byte bNum = 1;
short sNum = (short)bNum;
int iNum = sNum;
/* 설명. 연산 시에도 자동으로 큰 자료형에 맞춰서 낮은 자료형이 자동형변환 된다.*/
int num1 = 10;
long num2 = 20L;
long result1 = num1 + num2;
System.out.println("result1 = " + result1);
/* 설명. 문자형은 int형으로 자동형변환 가능하다. */
int ch1 = 'a';
System.out.println("ch1 = " + ch1);
/* 설명. int형에서 char형에 담기는 건 작은 범위로 대입되지만 가능하다.(예외) */
char ch2 = 65;
}
}
1-2-2. 강제 형변환 (암시적 형변환)
💡형변환(casting) 연산자를 이용한 강제적으로 수행하는 형변환 자동형변환의 조건과 정 반대인 경우 강제 형변환을 사용
package com.ohgiraffers.section05.typecasting;
public class Application2 {
public static void main(String[] args) {
/* 수업목표. 강제 형변환 규칙에 대해 이해할 수 있다. */
/* 필기.
* 강제형변환
* 바꾸려는 자료형으로 캐스트 연산자((자료형))를 이용하여 형변환한다.
* */
long lNum = 80000000000L;
int iNum = (int)lNum;
System.out.println("iNum = " + iNum);
float avg = 31.235f;
int floorNum = (int)avg;
System.out.println("floor = " + floorNum);
}
}
1-3. 자동형변환과 강제형변환을 이용한 연산
1-3-1. 서로 다른 자료형끼리의 연산
/* 다른 자료형 끼리 연산은 큰 자료형으로 자동 형변환 후 연산 처리 된다. */
int inum = 10;
long lnum = 100;
/* 자바에서는 같은 자료형끼리만 연산이 가능하다.
* 따라서 서로 자료형이 다른 두 자료를 연산할 때 자료형이 같아지도록 형변환을 해 주어야 한다.
* */
/* 방법1. 두 수의 연산 결과를 int 형으로 변환 후 int 자료형 변수에 리턴받는다. */
//int isum = inum + lnum; //그냥은 안된다. 두 자료형의 연산 결과는 큰 쪽 자료형인 long이 되고, long형 값은 int형 변수에 담길 수 없다.
int isum = (int) (inum + lnum);
System.out.println("isum : " + isum);
/* 방법2. long 형 값을 int로 강제 형변환 한다. */
int isum2 = inum + (int) lnum;
System.out.println("isum2 : " + isum2);
/* 방법3. 결과 값을 long형 자료형으로 받는다(자동 형변환 이용) */
long lsum = inum + lnum;
System.out.println("lsum : " + lsum);
// 실행 결과
isum : 110
isum2 : 110
lsum : 110
1-3-2. 형변환을 이용한 연산 시 주의사항
/* 주의! int 미만의 연산의 처리 결과는 int형 이다. */
byte byteNum1 = 1;
byte byteNum2 = 2;
short shortNum1 = 3;
short shortNum2 = 4;
int result1 = byteNum1 + byteNum2;
int result2 = byteNum1 + shortNum1;
int result3 = shortNum1 + byteNum1;
int result4 = shortNum1 + shortNum2;
System.out.println("result1 : " + result1);
System.out.println("result2 : " + result2);
System.out.println("result3 : " + result3);
System.out.println("result4 : " + result4);
// 실행 결과
result1 : 3
result2 : 4
result3 : 4
result4 : 7