✓ 자동 타입 변환
- 큰 허용 범위 타입 ← 작은 허용 범위 타입
- 정수 타입이 실수 타입으로 저장될 경우 무조건 자동 타입 변환이 일어난다
- 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() 를 써주면 된다
'컴퓨터 & 코딩 > Java' 카테고리의 다른 글
[혼공학습단 10기][혼공자] 연산자 (0) | 2023.06.29 |
---|---|
[혼공학습단 10기][혼공자] 변수와 시스템 입출력 (0) | 2023.06.29 |
[혼공학습단 10기][혼공자] 변수와 기본 타입 (0) | 2023.06.28 |
[혼공학습단 10기][혼공자] Chapter 1 정리 (0) | 2023.06.28 |
[혼공학습단10기][혼공자] m1 맥북에서 자바 다운로드하고 환경변수 설정하기 (0) | 2023.06.28 |