변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 의미

묵시적 형변환(Implicit Type Conversion)

서로 다른 타입의 연산이나 대입 시, 형변환을 통해 타입을 일치시켜주어야 함. 하지만 편의상 형변환을 생략할 수 있는데, 이 때 JAVA 컴파일러가 자동으로 타입을 변환.

단, 변수가 저장할 수 있는 값의 범위보다 작은 값을 저장할 경우에만 묵시적 형변환이 이루어짐.

// int + float => 둘 중 값의 범위가 더 큰 float으로 형변환이 자동으로 이루어짐
// float + float => float
int a = 256;
double b = 10.0;
System.out.println(a+b); // 266.0 

// 값의 범위가 더 큰 int 변수를 byte에 저장하려는 경우, 
// 묵시적 형변환이 이루어지지 않고 에러 발생
int c = 256;
byte d = c; // 에러 발생(byte 범위를 벗어남)

명시적 형변환(Explicit Type Conversion/Casting)

형변환 연산자(캐스트 연산자)를 통해 명시적으로 형변환이 가능

단, 자료형의 범위를 초과하는 값이 할당된 경우 값의 손실이 발생될 수 있음

int a = 1000;
byte b = (byte) a; // -24 
// byte 타입은 값의 범위가 -256~255로, 1000을 할당 시 범위를 초과하게 됨.
// 255+1의 결과는 int 타입에서는 256이지만, byte 타입에서는 -256이 됨.