1. 형변환(캐스팅, casting)이란?
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
int타입의 값과 float타입의 값을 더하는 경우, 먼저 두 값을 같은 타입으로 즉, 둘 다 float타입으로 변환한 다음에 더해야 한다.
2. 형변환 방법
(타입)피연산자 ex. int score = (int)85.4;
변 환 | 수 식 | 결 과 |
int -> char | (char)65 | 'A' |
char -> int | (int)'A' | 65 |
float -> int | (int)1.6f | 1 |
int -> float | (float)10 | 10.0f |
float타입의 값을 int타입으로 변환할 때 소수점 이하의 값은 반올림이 아닌 버림으로 처리된다.
3. 정수형간의 형변환
큰 타입에서 작은 타입으로의 변환, 예를 들어서 int타입(4 byte)의 값을 byte타입(1 byte)으로 변환하는 경우는 아래와 같이 크기의 차이만큼 잘려나간다. 그래서 경우에 따라 '값 손실(loss of data)'이 발생할 수 있다.
변환 | 2진수 | 10진수 | 값손실 |
int ↓ byte |
00000 ... 00001010 00001010 |
10 10 |
없음 |
int ↓ byte |
000000 ... 100101100 00101100 |
300 44 |
있음 |
반대로 작은 타입에서 큰 타입으로의 변환, 예를 들어서 byte타입(1 byte)의 값을 int타입(4 byte)으로 변환하는 경우는 저장공간의 부족으로 잘려나가는 일이 없으므로 값 손실이 발생하지 않는다. 그리고 나머지 빈공간은 0 또는 1로 채워진다.
변환 | 2진수 | 10진수 | 값손실 |
byte ↓ int |
00001010 00000 ... 00001010 |
10 10 |
없음 |
byte ↓ int |
11111110 111111...11111110 |
-2 -2 |
없음 |
4. 자동 형변환
서로 다른 타입간의 대입이나 연산을 할 때, 형변환으로 타입을 일치시키는 것이 원칙이다. 하지만, 경우에 따라 편의상의 이유로 형변환을 생략할 수 있다. 그렇다고 해서 형변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가한다.
float f = 1234; //형변환의 생략. float f = (float)1234;와 같음
자동 형변환의 규칙
기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.
표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.
byte(1 byte) -> short(2 byte) -> int(4 byte) -> long(8 byte) -> float(4 byte) -> double(8 byte)
char(2 byte) ┘
1) boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
2) 기본형과 참조형은 서로 형변환할 수 없다.
3) 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.
'Java > 기초' 카테고리의 다른 글
[Java] 객체지향 프로그래밍 1 (0) | 2020.06.24 |
---|---|
[Java] 배열(array) (0) | 2020.06.23 |
[Java] 기본형(Primitive type) - 정수형, 실수형 (0) | 2020.06.21 |
[Java] 기본형(Primitive type) - 논리형, 문자형 (0) | 2020.06.14 |
[Java] 진법 (0) | 2020.06.14 |