형변환(Casting)
- 변수 또는 상수 자료형을 다른 형식으로 변환하는 것
- boolean 제외
형변환 사용
- 컴퓨터 값 처리 원칙에 벗어난 경우 형변환을 사용한다.
컴퓨터의 값 처리 원칙
- 대입 연산자 기준으로 L-Value 와 R-Value의 값이 같아야 한다.
- 같은 자료형끼리 계산 가능하다.
- 계산의 결과도 같은 자료형의 결과값이 나와야 한다.
형변환 방법
형변환 하고자 하는 값과 자료형의 표현 범위에 따라 방법이 나뉜다.
- 자동 형변환(묵시적 형변환)
- 강제 형변환
자동 형변환(묵시적 형변환)
- 컴파일러가 자동으로 형변환을 한다.
- 데이터 표현 범위가 작은 자료형을 큰 자료형으로 변환한다.
- byte와 short 자료형의 계산 값은 무조건 int로 변환된다.
- byte(1byte) -> short(2byte), char(2byte) -> int(4byte) -> long(8byte) -> float(4byte) -> double(8byte)
public void autoCasting() {
short s = 10;
int i = s;
long l = i;
double d = l;
double dSum = 12 + 5.5; // 12.0 + 5.5 = 17.5
long lSum = 50 + 50; // (int)50 + (int)50 = int(100), lSum = (long)100
long lSum2 = 60 + 60L; // 60L + 60L = 120L
float f = 10_000_000_000L; // 실수인 float이 long보다 데이터 표현 범위가 크기 때문에 자동 형변환 가능
System.out.println("short s : " + s);
System.out.println("int i : " + i);
System.out.println("long l : " + l);
System.out.println("double d : " + d);
System.out.println("dSum Result : " + dSum);
System.out.println("lSum Result : " + lSum);
System.out.println("lSum2 Result : " + lSum2);
System.out.println("float f : " + f);
}
결과값
short s : 10
int i : 10
long l : 10
double d : 10.0
dSum Result : 17.5
lSum Result : 100
lSum2 Result : 120
float f : 1.0E10
byte와 short 자료형의 계산
- byte와 short 자료형의 계산 값은 무조건 int로 변환된다.
public void autoCasting() {
byte bData1 = 10;
byte bData2 = 20;
// byte bSum = bData1 + bData2; // ERROR
int bSum = bData1 + bData2; // 저장 변수를 int로 변환
System.out.println("byte bSum : " + bSum);
}
형변환 계산 오류
결과값
byte bSum : 30
Unicode 변환
public void autoCasting() {
int nUC = '가'; // 문자를 Unicode 숫자로 변환
char ch = 65; // 숫자를 Unicode 문자로 변환
// char chx = -65; // -65라는 Unicode는 존재하지 않음
System.out.println("int nUC : " + nUC);
System.out.println("char ch : " + ch);
}
char에 음수 대입 시 오류
결과값
int nUC : 44032
char ch : A
강제 형변환
- 개발자가 형변환을 한다.
- 데이터 표현 범위가 큰 자료형을 작은 자료형으로 변환한다.
- 데이터 손실이 발생할 수 있다.
public void casting() {
double d = 3.14;
// float = d; // 데이터 범위가 큰 double(8byte)를 작은 float(4byte)로 변환 시 ERROR
float f = (float)d;
int i = (int) d;
System.out.println("double d : " + d);
System.out.println("float f : " + f);
System.out.println("int i : " + i);
}
결과값
double d : 3.14
float f : 3.14
int i : 3
강제 형변환 시 데이터 손실
public void casting() {
int nData = 10;
int nSum = 0;
double dData = 7.32;
nSum = (int)(nData + dData); // int 강제 형변환으로 소수점 절사
System.out.println("nSum : " + nSum);
}
결과값
nSum : 17
'Developer TABLE > Java' 카테고리의 다른 글
출력 메소드(Print Method) (0) | 2021.08.23 |
---|---|
입력(Scanner)받기 (0) | 2021.08.20 |
오버플로우(Overflow)란? (0) | 2021.08.20 |