자동 형 변환
서로 다른 타입 간의 대입이나 연산을 할 때, 형 변환으로 타입을 일치시키는 것이 원칙이다.
하지만, 경우에 따라 편의상의 이유로 형 변환을 생략할 수 있다.
그렇다고 해서 형 변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형 변환을 자동적으로 추가한다.
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 파일로 제공