Java
[Java] 형 변환
gorusair
2021. 12. 8. 00:04
형변환(캐스팅, casting) 이란
형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
형변환 방법
(타입)피연산자
- 형변환 방법은 아주간단하다. 형변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주기만 하면된다.
- 여기에 사용되는 괄호()는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅'이라고도 한다.
double d = 85.4;
int score = (int)d; // double 타입의 변수 d를 int타입으로 형변환
- int score = (int)d;
- int score = (int)85.4; // 변수 d의 값을 읽어 와서 형변환 한다.
- int score = 85; //형변환의 겨로가인 85를 변수 score에 저장한다.
class CastingEx1 {
public static void main(String[] args){
double d = 85.4;
int score = (int)d;
System.out.println("score="+score);
System.out.println("d="+d);
score=85
d=85.4 <-형변환 후에도 피연산자에는 아무런 변화가 없다
정수형간의 형변환
- 큰 타입에서 작은 타입으로의 변환, 예를 들어 int타입(4byte)의 값을 byte타입(1 byte)으로 변환하는 경우
같은 크기의 차이 만큼 잘려나간다. 그래서 경우에 따라 '값 손실'이 발생할 수 있다.
- 반대로 작은 타입에서 큰 타입으로 변환하는 경우는 값 손실이 없으므로 나머지 빈공간은 0 또는 1로 채워진다.
(원래의 값을 채우고 남은 빈공간은 0 으로 채우는게 보통이지만, 변환하려는 값이 음수인 경우에는 빈 공간을 1로
채운다. 그 이유는 형변환 후에도 부호를 유지할 수 있도록 하기 위함)
package ch02;
public class CastingEx2 {
public static void main(String[] args) {
int i = 10;
byte b = (byte)i;
System.out.printf("[int -> byte] i =%d -> b=%d%n", i,b);
i = 300;
b = (byte)i;
System.out.printf("[int->byte] i=%d -> b=%d%n", i,b );
b = 10;
i = (int)b;
System.out.printf("[byte->int] b=%d -> i =%d%n", b, i);
b = -2;
i = (int)b;
System.out.printf("[byte -> int] b=%d ->i =%d%n", b, i);
System.out.println("i="+Integer.toBinaryString(i));
}
실행결과
[int -> byte] i =10 -> b=10
[int->byte] i=300 -> b=44
[byte->int] b=10 -> i =10
[byte -> int] b=-2 ->i =-2
i=11111111111111111111111111111110
실수형 간의 형변환
실수형에서도 정수형처럼 작은 타입에서 큰 타입으로 변환하는 경우, 빈 공간을 0으로 채운다.
package ch02;
public class CastingEx3 {
public static void main(String[] args) {
float f = 9.1234567f;
double d = 9.1234567;
double d2 =(double)f;
System.out.printf("f =%20.18f\n", f);
System.out.printf("d =%20.18f\n", f);
System.out.printf("d2 =%20.18f\n", f);
}
}
f =9.123456954956055000
d =9.123456954956055000
d2 =9.123456954956055000
정수형과 실수형간의 변화
package ch02;
public class CastingEx4 {
public static void main(String[] args) {
int i =92134567; // 8자리의 10진수
float f = (float)i; // int를 float로 형변환
int i2 = (int)f; // float를 다시 int로 형변환
double d = (double)i; // int를 double로 형변환
int i3 = (int)d; // double을 다시 int로 형변환
float f2 =1.666f;
int i4 = (int)f2;
System.out.printf("i=%d\n", i);
System.out.printf("f=%f i2 =%d\n", f, i2);
System.out.printf("d=%f i3=%d\n",d,i3);
System.out.printf("(int)%f =%d\n", f2 , i4);
}
}
i=92134567
f=92134568.000000 i2 =92134568
d=92134567.000000 i3=92134567
(int)1.666000 =1