반응형
자동 타입 변환(promotion)
- 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생
long lVal = 100000000L float fVal = lVal; // 1.0E8f
double dVal = lVal; // 1.0E8
char cVal = 'A';
int iVal = cVal; // 65
- 정수 연산은 모두 int 타입으로 자동 타입 변환 후 계산 됨
- 정수 연산이 필요하면 int로 선언할 것
- 자동 타입 변환을 하지 않아 성능 향상
byte x = 10;
byte y = 20;
byte z = x + y; // 컴파일 에러(byte z = int 30)
int z = x + y; // 30 byte
z = 10 + 20; // 30 (int로 변환 x)
- 연산에서 피연산자끼리 타입이 다를 땐 큰 타입으로 자동 타입 변환
byte x = 10;
int y = 20;
long z = 30l;
long xyz = x + y + z; // long으로 형변환 후 연산
강제 타입 변환(Casting)
- 허용 범위가 큰 값을 허용 범위가 작은 타입에 강제로 저장
- 실수 타입을 정수 타입으로 바꿀 때는 반드시 캐스팅 필요
double dVal = 3.14;
int iVal = (int) dVal; // 3
byte bVal = (byte)iVal; // 3
- 문자열(String)을 기본 타입으로 변환할 때 parse 사용
String str = '10';
byte bVal = Byte.parseByte(str);
int iVal = Int.parseInt(str);
double dVal = Double.parseDouble(str);
boolean boolVal = Boolean.parseBoolean(str);
- 기본 타입을 문자열(String)으로 변환할 때
.valueOf
사용String str1 = String.valueOf(3.14); String str2 = String.valueOf(true); String str3 = String.valueOf(15);