변수끼리 연산을 할 때 각 변수의 자료형이 다를 경우 자료형을 같게 바꾸는 것을 말한다.
형 변환은 크게 (1) 묵시적 형 변환(자동 형 변환) (2) 명시적 형 변환(강제 형 변환) 로 나누어진다.
💡 묵시적 형 변환 : 연산시 자동적으로 데이터타입 형태가 변환되는 경우
(1) 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어진다.
(2) 덜 정밀한 자료형에서 더 정밀한 자료형으로 형 변환은 자동으로 이루어진다.
(1) 덜 정밀한 자료형에서 더 정밀한 자료형으로 변환하는 경우
int iNum = 20; float fNum = iNum; // int와 float 모두 4바이트 이지만 float가 더 정밀하게 데이터를 표현할 수 있다.
(2) 연산 중에 바이트 크기가 작은 자료형에서 큰자료형으로 자동 변환 되는 경우
int i = 20; float f = i; // float > int 큰 형태이므로 int형태의 변수를 float형태의 변수의 대입하면 자동으로 float형태로 형 변환이 된다. double d; d = f + i; // double > float > int 큰 형태이므로 float형태의 변수와, int형태의 변수를 더한 값을 double형태의 변수의 대입하게 되면 자동적으로 double형태로 형 변환이 된다.
💡 명시적 형 변환 : 연산시 자동적으로 형태가 변환되지 않아 수동으로 변환을 해야되는 경우
(1) 바이트 크기가 큰 자료형 → 작은 자료형으로 대입하는 경우
(2) 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
(1) 바이트 크기가 큰 자료형 → 작은 자료형으로 대입하는 경우
int i = 10; byte b = (byte)i; // int > byte로 큰 형태이므로 큰 형태에서 작은 형태로 변환을 하려면 앞에 변환되는 형태의 타입을 적어줘야한다.
(2) 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
double d = 3.14; int i = (int)d; double > int로 더 정밀하기 떄문에 더 정밀 → 덜 정밀로 변환하려면 앞에 덜 정밀한 데이터타입을 적어줘야한다.
public class ConversionTest {
// chapter2-2
public static void main(String[] args) {
// 큰 타입으로 자동변환
byte var_byte1 = 10;
int var_int1 = var_byte1;
System.out.println("var_int1 = " + var_int1);
// 명시적 형변환: 큰 타입의 값을 작은 타입의 변수에 할당
// 명시적으로 형변환해 주지 않으면 컴파일 오류가 발생한다.
int var_int2 = 100;
byte var_byte2 = (byte)var_int2;
// char 와 short
short var_short1 = 200;
char var_char1 = (char)var_short1;
System.out.println("var_char1 = " + var_char1);
// int 정수타입보다 작은 정수타입들의 연산: int형으로 변환된다.
// int 정수타입보다 작은 정수타입의 변수에 값을 할당하려면
//명시적으로 형을 변환시켜야한다.(이유:int형으로 인식하기때문)
byte var_byte3 = 20;
byte var_byte4 = 40;
byte var_result1 = (byte)(var_byte3 + var_byte4);
char var_char2 = 'A';
int var_int_result1 = var_char2 + 1;
System.out.println("var_int_result1 = " + var_int_result1);
// 연산시 피연산자 중 보다 큰 타입으로 형 변환된 후 연산된다.
//[즉, int<long 둘이 연산시 큰 타입인 long형으로 변환 후 연산된다.
int var_int3 = 100;
long var_long1 = 100;
long var_long_result1 = var_int3 + var_long1;
System.out.println("var_long_result = " + var_long_result1);
// 정수와 실수를 연산하면 실수 타입으로 자동 형 변환된다.
// 여기서 3.14뒤 f는 float를 뜻하는데 실수기본타입은 double이기 때문에 float타입이라고 지정을 해주는거다.
long var_long2 = 100;
float var_float1 = 3.14f;
float var_float_result1 = var_long2 + var_float1;
System.out.println("var_float-result1 = " + var_float_result1);
// float타입과 double타입을 연산하면 double타입으로 변환된다.
float var_float2 = 3.33f;
double var_double3 = 4.22;
double var_long_result2 = var_float2 + var_double3;
System.out.println("var_long_result2 = " + var_long_result2);
}/////////main
}/////////class