특정 데이터를 원하는 타입으로 변환하여 사용
형 변환 , 자료형변환
Promotion, Casting
하나의 자료형을 다른 자료형으로 변환하는 작업
코드 작성을 유연하게 하기 위해서 사용
int > double
float > short
1. 암시적 형변환(자동 형변환), Promotion
byte b1;
short s1;
b1 = 10; //원본
//LValue = RValue
//***** LValue = RValue의 자료형은 반드시 동일
//(자료형) : 형변환 연산자
//Short = Byte
//s1 = b1;
s1 = b1;
System.out.println(s1); //복사본
//결과
10
2. 명시적 형변환(강제 형변환), Casting
byte b2;
short s2;
s2 = 10; //원본
//Byte(1) = Short(2)
//자동으로 형변환 해주지 않음. 꼭 직접 써줘야함
b2 = (byte)s2;
System.out.println(b2); //복사본
//결과
10
❗ 주의 할 점 ❗
: 형변환 시 int의 숫자 범위를 넘어가면 오버플로우 발생
: int로 표현할 수 있는 범위를 초과하는 큰 값이므로, 형변환 시에 오버플로우가 발생하게 되어 음수 값
//기업 은행 > 계좌
int m1;
long m2 = 3000000000L;
//계좌 이체
m1 = (int)m2;
System.out.printf("계좌이체결과: %,d원\n" , m1);
//결과
계좌이체결과: -1,294,967,296원
//*** 정수와 실수간의 크기 비교는 단순한 메로리 크기가 아닌, 실제 저장하는 수의 범위로 비교한다.
//byte(1) < short(2) < int(4) < long (8) <<< float(4) < double(8)
long n5;
float n6 = 10;
//long(8) = float(4)
n5 = (long) n6;
System.out.println(n5);
✔ char 형변환
char c1 = 'A'; //내부는 숫자 데이터
System.out.println(c1); //결과 : A
System.out.println((int)c1); //결과 : 65
System.out.println((char)65); //결과 : A
char c2; //2byte - 원본
short t2; //2byte
-------------------------------------
c2 = '가';
//short(2) = char(2) => 오른쪽을 큰 값으로 인식 = 명시적 형변환
t2 = (short)c2; //문자 코드 값으로 변환
System.out.println(c2); //결과 : 가
------------------------------------
char c3;
short t3;
t3 = 65;
c3 = (char)t3; //이상하게 또 오른쪽을 큰 값으로 인식 (둘의 자리를 바꿨는데도)
//char는 음수가 없어서 short와 char의 같은 범위가 적음 => 그래서 명시적으로 하라고 하는 것
//***** char는 반드시 int로만 형변환한다.
System.out.println(c3); //결과: A
✔ 값형과 참조형간에는 형변환이 절대 불가능하다.