J9 - 자동 형변환

자동 형변환

리터럴을 변수에 대입할 때는 변수와 리터럴이 반드시 같은 형이어야 하지만 변환이 되어도 정보의 손실이 없는 경우 자동 형변형이 됩니다. 자동 형변환은 계산식 안에서도 발생합니다.

long a = 10; //10L로 자동 형변환되어 a에 대입
double b = 10; //10.0으로 자동 형변환되어 b에 대입
double x = 3.5;
double y = x * 2;  //2가 자동으로 2.0으로 자동 형변환되어 계산에 사용

만일 형변환이 있을 경우 데이터의 손실이 생기게 되면 자동 형변환이 되지 않고 컴파일 에러가 발생합니다.


int c = 10.5


위의 소스에서 보자면, 10.5는 double 인데 int 인 c에 대입하고자 하면 10이 되고 결국 소수점 이하 0.5가 손실되므로 컴파일 에러가 발생합니다.

자동 형변환이 가능한 경우

  • 정수형에서는 비트수가 작은 형에서 큰 형으로
  • 정수형은 부동소수점형(실수형:float)로 자동 형변환

자동 형변환이 가능한 방향

byte → short / char → int → long → float → double

캐스트

자동 형변환이 되지 않는 경우는 앞에서 설명한 대로 '손실이 발생할 때'입니다.
그러나 프로그래머가 의도적으로 혹은 어느 정도의 데이터 손실을 감안하는 경우에 강제적으로 형변환을 하는 경우
이것을 캐스트라고 합니다. 자동 형변환과는 반대의 방향으로 이루어 지는 강제적 형변환 입니다.

캐스트 입력하는 법

(변환하려는 형)캐스트 대상   //변환하려는 형을 괄호로 묶는다.

예)

int a = (int)5.5;
double b = (double)10;
byte c = 9.5;


캐스트가 필요한 형변형의 방향

byte ← short  ← int ← long ← float ← double
byte ↔ char  ← int
short ↔ char


  • 캐스트는 리터럴과 변수, 식에 적용가능
  • boolean형은 어떤 형으로도 캐스트 불가
  • String형은 char형 등 기본 데이터형으로 캐스트 불가