- 자동(묵시적) 타입 변환(Promotion)
작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생한다.
변환 이전의 값과 변환 이후의 값은 동일하다. 손실없이 보존된다.
byte (1) < short (2) < int (4) < long (8) < float (4) < double (8)
char는 2byte를 가지지만 음수가 저장될 수 없으므로 음수가 저장될 수 있는 타입은 char로 자동 변환되지 않는다.
char가 int로 자동 변환되면 유니코드 값이 int 타입 변수에 저장된다.
실수 타입은 정수 타입으로 자동 타입 변환 되지 않는다.
- 강제(명시적) 타입 변환(Casting)
강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것.
캐스팅을 할 경우 원래 값이 보존되지 않을 수도 있다. 안전하게 값이 보존됐는지 확인할 필요가 있다.
float 타입은 부동 소수 방식으로 값을 저장하며, 가수를 담는 비트수가 23bit 이기때문에 int 타입으로 캐스팅 했을 때 값이 바뀔 위험이 있다. 가수 비트 수가 52bit인 double 타입을 int 타입으로 변환하면 손실이 없다.
- 연산식에서의 자동 타입 변환
연산은 같은 타입의 피연산자(operand) 간에만 수행되기 때문에 서로 다른 타입의 피연산자가 있을 경우,
두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산을 수행한다.
또, 자바에서는 정수 연산일 경우 int 타입을 기본으로 하기 떄문에 그 보다 작은 타입은 int 타입으로 변환된 후 연산이 수행된다. 따라서 연산의 결과도 int 타입이 된다.
'old > Java' 카테고리의 다른 글
조건문(Conditional Statement) (0) | 2020.11.14 |
---|---|
연산자(operator)와 연산식(expressions) (0) | 2020.11.14 |
데이터 타입(자료형) - 기본형 (0) | 2020.11.14 |
리터럴(literal) (0) | 2020.11.11 |
변수 (0) | 2020.11.11 |