[Java] 변수(Variable) - 타입 변환

chael_lo·2021년 5월 3일
0

Java

목록 보기
5/52

타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.
기본형과 참조형 모두 형변환이 가능하지만, 기본형과 참조형 사이에는 형변환이 성립되지 않는다.

자동 타입 변환(Promotion)

일반적으로 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생하며 컴파일러가 생략된 형변환을 자동적으로 해준다.
타입을 변경해도 정보의 손실이 일어나지 않는 경우 자동 형 변환이 일어난다.

기본 타입 허용 범위 크기 비교(boolean은 제외)
byte(1) < short(2), char(2) < int(4) < long(8) < float(4) < double(8)

char cha = 'A';
int target = cha; 

//문자가 정수로 자동 형변환될 때는 문자의 유니코드 값이 저장
System.out.println(target); //출력: 65

예외! long(8) -> float(4) : 가능
float가 long보다 표현할 수 있는 값의 범위가 더 커서 형변환이 가능하다.(부동소수점 참고)

long longValue = 100;//long 8
float floatValue = longValue;//float 4
		
//정수타입이 실수 타입으로 저장될 경우 무조건 자동 형 변환
System.out.println(floatValue); //출력: 100.0 

예외! byte(1) -> char(2) : 에러
char 타입의 허용 범위(0~65535)에 음수를 포함하지 않아서 작은 타입에서 큰 타입으로의 변환이어도 에러가 난다. (byte 타입은 음수를 포함)

byte byteByte = 64;
char charChar = byteByte; //Type mismatch error

강제 타입 변환(Casting)

허용 범위가 큰 타입은 허용 범위가 작은 타입으로 자동 타입 변환이 될 수 없어서,
허용 범위가 큰 타입에서 허용 범위가 작은 타입으로 강제로 나눠서 저장해야 한다.
강제 타입 변환은 캐스팅 연산자()를 사용한다.

(타입이름) 피연산자 

캐스팅 연산자( )
캐스팅 연산자는 결과로 피연산자의 값을 지정한 타입으로 변환 후 반환하며(캐스팅 연산자는 우선순위가 매우 높다), 이 때 일어나는 형변환은 피연산자의 원래 값에 영향을 미치지 않는다.

int intValue = 1;
byte byteValue = (byte) intValue;
short shortValue = (short) intValue;

System.out.println(byteValue);// 출력: 1
System.out.println(shortValue);// 출력: 1

주의! 특정 변수의 최대 값은 얼마인지 확인
형변환만 했을 뿐, 서로 동일한 값이 나오지 않을 경우를 생각해야 한다.

double doubleDouble = 3.33;
int intInt = (int) doubleDouble;

//실수 타입은 소수점 이하부분은 버려지고 정수 부분만 저장한다
System.out.println(intInt);// 출력: 3
profile
천천히 꾸준히

0개의 댓글