4. 형변환(casting)
1) 변수 자동변환(묵시적 형변환)
- 연산 시 기본 타입의 허용 범위 순에서 넓은 쪽으로 자동 변환됨
: byte → int로, int → long / float, long → double 으로 등등 변환
타입 크기순
- char 타입은 유니코드 정수이므로 음수 값이 없음 ⇒ 음수값이 있는 변수를 char 타입으로 변환하려 하면 에러 발생
- ❤️😢정수 타입 변수 byte, char, short 타입은 연산시 int 타입으로 자동 변환
→ 부호 연산도 연산이므로 포함됨
⇒ 특별 경우 제외하면 정수 연산시 int 선언이 효과적 - 하나라도 long이나 float, double 타입이면 해당 타입으로 자동 변환
- int < float, 정수 < 실수 때문
- 하나라도 문자열인 경우 문자열로 자동 변환
int i = 3 + 7; //10출력
String s = "3" + 7; // "7"로 자동 변환되어 37 출력
형변환 허용 범위순 정리
: byte < short < char(하나의 문자) < int < long < float < double
byte value1 = 10;
int value2 = 100;
long value3 = 1000L;
long result = value1 + value2 + value3;
// byte + int = int로 변환되어 계산됨
// int(1, 2값) + long = long으로 변환되어 계산됨
System.out.println(result);
- 피연산 중 실수가 포함되어 있으면, 정수도 실수로 변환되어 계산
- 자바에서는 기본적으로 실수 리터럴을 double 타입으로 해석 → double 값을 먼저 실수로 강제 변환한 뒤에 계산하면 원래대로 계산 가능
- float을 이용하려면 실수 뒤에 "f"를 붙여놔야함 → float(소수점 6~9이하), double(소수점 15~18 이하) ⇒ double 타입이 float 타입보다 약 2배 정밀도가 높아 더 정확함
- 반대로 정수끼리만 리터럴로 계산하면 결과값이 실수가 되어도 정수로 표현됨
int intValue3 = 10;
int intValue4 = intValue3 / 4; // 10 / 4 = 2.5
System.out.println(intValue4); // 2가 출력
double doubleValue = intValue3 / 4.0; //실수로 연산 작성하면
System.out.println(doubleValue); // 2.5가 출력
- 문자로 나타내고 싶으면 아래처럼 강제변환 해야 함
System.out.println((char)result2);
+ 인터페이스 자동 변환도 가능하다
- 구현 객체와 그 자식 객체가 인터페이스 타입으로 자동 변환됨
2) 강제 형변환
- 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 개어 한 조각만 저장
- 데이터의 변형, 손실을 감수하고 진행하는 것임
- 평소에는 잘 사용하지 않으나 다형성 활용 위해 원본 데이터를 찾을 때 강제 변환 진행함
- (변형할 자료형)리터럴값 또는 변수명
- 실수 타입 → 정수 타입 : 소수점 이하는 버려짐
int i = 10;
byte a = (byte) i; // int에서 byte로 강제 타입 변환 실행
int i = 65;
char charValue = (char) i;
System.out.prinltn(CharValue); // 65 유니코드에 해당하는 "A" 문자 출력
double doubleValue = 3.14;
int intValue = (int) doubleValue; // 3.14 실수를 정수로 변환
System.out.prinltn(intValue); // 3 출력
- 문자열 String을 기본 타입으로 강제 변환하려면 -> 모두 .parse로 시작하는 메소드 사용
- 문자열이 숫자 외 요소 포함시 숫자 형식 예외(NumberFormatException) 발생 (”문자93” 등)
- String.valueOf() 메소드 사용하여 문자열로 변환 혹은 “”와 + 연산 추가해주면 문자열로 자동 변환되어 String 저장 가능
반응형
'JAVA' 카테고리의 다른 글
6. 자바(java) : 제어문(Control Statement) 간단 정리 (0) | 2024.03.28 |
---|---|
5. 자바(java) : 연산자(Operator) 간단 정리 (2) | 2024.03.27 |
3. 자바(java) : 변수(Variable) 간단 정리 (0) | 2024.03.26 |
2. 자바의 기본 구조, 클래스 개요 정리 (0) | 2024.03.21 |
1. 자바? (0) | 2024.03.20 |