형변환이란,
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
(타입) 피연산자
double d = 85.4;
int score = (int)d;
-> int score = (int)85.4;
-> int score = 85;
85.4 자체를 변환했기 때문에, 변수 d의 값은 변하지 않았다.
유니코드 문자표에서 A = 65
자동 형변환
float f = 1234; // int타입의 값을 float타입의 변수에 저장
float f = (float)1234; // 대입 연산자의 양쪽 타입이 일치해야 한다.
-> 컴파일러에서 자동으로 형변환을 해준다.
int i = 3.14f; // 에러 (float가 int보다 범위가 넓기 때문에 에러가 난다)
int i = (int)3.14f; // OK.
형변환을 하는 이유는 주로 서로 다른 두 타입을 일치시키기 위해서인데, 형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.
"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."
그래서 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.
byte b = 100; // OK.
byte b = (byte)100; // OK. byte타입으로 형변환하여 대입
byte의 범위는 -128~127이기 때문에 100은 범위 안에 들어가기 때문에 문제가 없다.
int i = 100;
byte b = i; // 에러. int타입을 byte 타입에 대입
byte b = (byte)i; // OK. byte타입으로 형변환하여 대입
-> i의 값이 변수이니 이 값이 손실이 있을지 없을지 판단이 안되기 때문에, 값을 정해주지 않아 에러가 뜬다.
byte b = 1000; // 에러. byte 타입의 범위(-128 ~ 127)를 벗어난 값의 대입
byte b = (byte)1000; // OK. 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.
'java↗' 카테고리의 다른 글
java↗4-5. 반올림 Math.round(), 나머지 연산자 (0) | 2024.03.14 |
---|---|
java↗4-4. 사칙 연산자, 산술변환 (1) | 2024.03.14 |
java↗4-2. 증감 연산자, 부호 연산자 (0) | 2024.03.14 |
java↗4-1. 연산자의 우선순위 (0) | 2024.03.14 |
java↗4. 연산자 (0) | 2024.03.14 |