형변환
: 변수나 리터럴(상수)의 타입을 다른 타입으로 변환하는 것(타입)피연산자
괄호()
는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅(casting)'이라고도 함.ex)
double d = 85.4;
int score = (int)d;
연산과정 :
int score = (int)d; → int score = (int)85.4; → int score = 85;
변환 | 수식 | 결과 |
---|---|---|
int→char | (char)65 | 'A' |
char→int | (int)'A' | 65 |
float→int | (int)1.6f | 1 |
int→float | (float)10 | 10.0f |
🍕 float f = 1234; //OK
float f = (float)1234;에서 (float)가 생략. 에러 없음
🍕 byte b = 1000; //에러
byte타입의 범위(-128~127)를 벗어난 값의 대입
▶변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우 형변환을 생략하면 에러 발생
▶에러메시지incompatible types:possible lossy conversion from int to byte
: 큰 타입에서 작은 타입으로의 형변환은 값 손실이 발생할 수 있다는 뜻
🍕 byte b = (byte)1000; //OK
그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨
▶ 큰 타입에서 작은 타입으로 명시적인 형변환 해줬을 경우, 형변환이 프로그래머의 의도적인 것으로 간주하여 컴파일러는 에러를 발생시키지 않음
🚩 형변환을 생략하면 컴파일러가 자동적으로 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다
✅형변환이 가능한 7개의 기본형을 왼쪽부터 오른쪽으로 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열
✅왼쪽에서 오른쪽으로의 변환은 형변환 연산자를 사용하지 않아도 자동 형변환되며, 반대 방향으로의 변환은 반드시 형변환 연산자 입력 필수
+
뺄셈 -
곱셉*
나눗셈/
그리고, 나머지%
*
나눗셈/
나머지%
연산자가 덧셈+
뺄셈 -
연산자보다 우선순위가 높으므로 먼저 처리