컴퓨터 & 코딩/Java

[혼공학습단 10기][혼공자] 타입 변환

구로그 2023. 6. 28. 23:02
728x90

✓ 자동 타입 변환

- 큰 허용 범위 타입 ← 작은 허용 범위 타입 

- 정수 타입이 실수 타입으로 저장될 경우 무조건 자동 타입 변환이 일어난다 

- char 타입이 int 타입으로 자동 타입 변환 되면 유니코드 값이 저장된다 

❗️byte타입은 char 타입으로 자동 타입 변환될 수 없다 (byte타입은 음수까지 포함하기 때문) 

 

 

✓ 강제 타입 변환 

- 큰 허용 범위 타입 → 작은 허용 범위 타입

int intValue1 = 10;
byte byteValue = (byte) intValue1;

int intValue2 = 65;
char charValue = (char) intValue2; // "A" 

double doubleValue = 3.14;
int intValue = (int) doubleValue; // 3 (정수부분만 저장)

 

 


 

 

정수 연산에서의 자동 타입 변환

// int보다 작은 타입 변수가 피연산자일 때 
byte x = 10;
byte y = 20;
byte result = x + y; // 컴파일 에러
int result = x + y; // int 타입으로 자동 타입 변화되어 연산 수행됨 

// int 타입 변수가 피연산자일 때 
int x = 10;
int y = 10;
int result = x + y

// 컴파일 단계에서 연산 수행 (피연산자가 변수가 아닐 경우) 
byte result = 10 + 20; // 컴파일 에러 안 남

정수연산 시 int이하의 타입을 연산시키면 int 타입으로 자동 타입 변환되어 연산이 수행된다. 

만약 피연산자가 long일 경우에는 다른 피연산자도 long 타입으로 변환된 후 연산이 수행됨 (연산 결과도 long 타입 변수에 저장)

기본적으로 정수 연산 시 작은 허용 범위 타입이 큰 허용 범위 타입으로 변환되기 때문이다.

✅ 타입 변환을 줄여 주면 실행 성능이 향상 됨 

 

 

 

실수 연산에서의 자동 타입 변환 

두 피연산자가 동일한 타입이면 해당 타입으로 연산되지만, 

둘 중 하나가 double 타입이면 다른 피연산자도 double로 자동 변환되어 연산 수행된다. 이때 연산 결과도 double 타입이다. 

int + double 일 경우에도 double의 범위가 더 넓기 때문에 int가 double로 자동 변환 되어 연산 수행된다. 

 

 

❗️실수 리터럴 연산 시 주의 사항

doubl result = 1.2 + 2.3;

float result = 1.2 + 2.3; // 컴파일 에러 (f가 없는 실수 리터럴은 double로 해석)

// 해결 방법
float result = 1.2f + 2.3f;

 

❗️ int / int = int 

정수 나누기 정수를 하면 결과 값도 정수로 나온다. (소수점 아래가 버려진다) 

이를 해결하기 위해선 최소 하나의 피연산자를 double로 강제 타입 변환을 시켜줘야 한다. 

int x = 1;
int y = 2;
double result = x / y ; // 0.0

//해결방법 
double result = (double) x / y;
double result = x / (double) y;
double result = (double) x / (double) y;

 


✓ 문자열(String) ⇔ 기본 타입

// 문자열 → 숫자 
String str = "10";
byte value = Byte.praseByte(str);
short value = Short.parseShort(str);
int value = Integer.parseInt(str);
long value = Long.parseLong(str);
float value = Float.parseFloat(str);
double value = Double.parseDouble(str);

// 문자열 → 논리 타입 
String str = "true";
boolean value = Boolean.parseBoolean(str);

// 숫자 → 문자열 
String str = String.valueOf(3); // "3"

// NumberFormatException 
String str = "1a";
int value = Integer.parseInt(str); // NumberFormatException 발생

문자열을 기본타입로 강제 타입 변환할 때는 parse타입이름() 을 써주면 되고

숫자를 문자열로 강제 타입 변환할 때는  String.valueOf() 를 써주면 된다 

반응형