형변환이란? 변수 또는 상수의 타입을 다른 타입으로 변환 하는 것
(타입) 피연산자
double d = 85.4 ;
int score = int(d) ; // 피연산자 d를 int로 변경
int score = int(85.4) ;
-> int score = 85 ; // d를 형변환 했어도 변수 d의 값은 85.4 이다(변수 d의 값은 변하지 x)
변환 | 수식 | 결과값 |
int -> char | (char)65 | ‘A’ |
char -> int | (int)’A’ | 65 |
float -> int | (int)1.6f | 1 ( 반올림 x , 버려짐 ) |
int -> float | (float)10 | 10.0f |
자동 형 변환
float f = 1234 ; // int 타입의 값을 float 타입의 변수에 저장
float f = (float)1234 ; // 컴파일러가 자동으로 변경(자동형변환)
int i = 3.14f ; // 에러!!! 값 손실 발생(컴파일러가 자동 형변환 못함) 작은 <- 큰
int i = (int)3.14f ; // 3으로 변환(반올림 안함)
byte(1) -> short(2byte) -> int(4) -> long(8) -> float(4) -> double(8)
1) char( short <-> char 형변환 안됨, short는 부호 o , char는 부호 x)
2) float는 소숫점때문에 4byte지만 값의 범위가 long보다 크다
3) byte b = 100 ; 1 byte : -128~127로 자동 형변환 함
5) byte b = (byte)100 ; // byte 타입으로 형변환하여 대입.
// 값의 범위가 값손실이 없으므로 자동 형변환 가능함, 100은 리터럴이므로 자동 형변환
6) int i = 100 ;
byte b = i ; // 에러!!! 변수안에 어떤값이 들어올지 컴파일러 확신안되서 에러
byte b = (byte)i ; // byte 타입으로 형변환하여 대입
byte g = 1000; // 에러!!!, 값 손실 발생
byte g = (byte)1000; // OK, 값 손실 발생해서 -24가 저장됨