반응형

형변환이란,

변수 또는 상수의 타입을 다른 타입으로 변환하는 것

(타입) 피연산자

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가 저장됨.

반응형