타입변환
- 데이터 타입을 다른 데이터 타입으로 변환 하는 것
- 자동(묵시적)타입변환 & 강제(명시적) 타입변환
자동타입변환(Promotion)
- 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
- 작은 크기 타입이 큰 크기 타입에 저장될 때 발생 (크기 = 메모리 크기)
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
float이 int와 long보다 큰 이유 : 표현할 수 있는 값의 범위가 더 큼
- 자동타입 변환 발생 -> 변환 이전 값 = 변환 이후 값
int intValue =200;
double doubleValue = intValue; // 200.0 으로 저장
char charValue = 'A';
int intValue = charValue; // 65로 저장됨
public class PromotionExample {
public static void main(String[] args) {
byte byteValue=10;
int intValue = byteValue; //int <- byte
System.out.println(intValue); // 10
char charValue ='가';
intValue = charValue; //int <- char
System.out.println(intValue); // 44032
intValue =500;
long longValue = intValue; //long <- int
System.out.println(longValue); // 500
intValue = 200;
double doubleValue = intValue; //double <- int
System.out.println(intValue); // 200
}
}
강제 타입변환(Casting)
- 큰 데이터 타입을 작은 데이터 타입으로 강제적으로 쪼개서 저장
- 작은 크기 타입 = (작은 크기 타입) 큰 크기 타입
(1) 강제 타입 변환 시 원래 값이 보존되는 경우
ex.
int intValue = 10;
byte byteValue = (byte) intValue;
(2) 강제 타입 변환 시 원래 값이 보존되지 않는 경우
ex.
int intValue = 103029770;
byte byteValue = (byte)intValue;
public class CastingExample {
public static void main(String[] args) {
int intValue = 44032;
char charValue = (char) intValue;
System.out.println(charValue); // 가
long longValue = 500;
intValue = (int)longValue;
System.out.println(intValue); // 500
double doubleValue = 3.14;
intValue = (int)doubleValue;
System.out.println(intValue); // 3
}
}
변환시 데이터 손실이 발생하지 않도록 하기 위해 -> 보존될수 있는지 검사해야함
기본타입 |
최대값 상수 |
최소값 상수 |
byte |
Byte.MAX_VALUE |
Byte.MIN_VALUE |
short |
Short.MAX_VALUE |
Short.MIN_VALUE |
int |
Integer.MAX_VALUE |
Integer.MIN_VALUE |
long |
Long.MAX_VALUE |
Long.MIN_VALUE |
float |
Float.MAX_VALUE |
Float.MIN_VALUE |
double |
Double.MAX_VALUE |
Double.MIN_VALUE |
ex.
if((i<Byte.MIN_VALUE) ||(i>Byte.MAX_VALUE)) {
System.out.println("byte타입 변환 불가");
}
else {
byte b = (byte) i;
System.out.println(b);
}
int -> float vs int -> double
float
부호 (1비트) |
지수(8비트) |
가수(23비트) |
double
부호 (1비트) |
지수(11비트) |
가수(52비트) |
int의 크기는 32비트이므로 double의 가수 52비트보다 작기때문에 어떤 int값이어도 데이터 손실 없이 double타입으로 변환 가능
연산식에서의 자동타입변환
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; //intValue : double로 자동변환
System.out.println(result) // 15.5
'Programming Language > Java' 카테고리의 다른 글
[JAVA] 연산자- 이항연산자 (0) | 2020.05.28 |
---|---|
[JAVA] 연산자- 단항연산자 (0) | 2020.05.26 |
[JAVA] 데이터 타입 (0) | 2020.05.21 |
[JAVA] 변수 (0) | 2020.05.21 |
[JAVA] 명령프롬프트에서 java 실행 (0) | 2020.05.21 |