자동 형 변환

서로 다른 타입 간의 대입이나 연산을 할 때, 형 변환으로 타입을 일치시키는 것이 원칙이다.

하지만, 경우에 따라 편의상의 이유로 형 변환을 생략할 수 있다.

그렇다고 해서 형 변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형 변환을 자동적으로 추가한다.

float f = 1234 // 형변환의 생략. float f = (float)1234;와 같음.

 

그러나 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.

byte b = 1000; //에러. byte의 범위(-128~127)를 넘는 값을 저장.

 

 

그러나 명시적 형변환을 해 주었을 경우는 에러가 안 난다.

char ch = (char)1000;

 

또한 연산과정에서도 형 변환이 자동적으로 이루어진다.

 

자동형 변환의 규칙

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.
1 byte 2 byte 4 byte 8 byte 4 byte 8 byte
byte short int long float double
    char      

 

char와 short은 둘 다 2 byte의 크기로 크기가 같지만, 범위가 달라서 둘 중 어느 쪽으로 바꿔도 손실이 발생할 수 있으므로 형 변환이 수행될 수 없다.

1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
2. 기본형과 참조형은 서로 형변환할 수 없다.
3. 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만,
   값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.

연습문제는 코드 초보 스터디(http://cafe.naver.com/javachobostudy.cafe)에서 PDF 파일로 제공

 

+ Recent posts