자동 형 변환
byte < short < int < long < float < double
public class Promotion {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte b = 10; // 00001010
short s = b; // 00000000 00001010
int i = s; // 00000000 00000000 00000000 00001010
long l = i; // 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001010
float f = 0.5f;
double d = f; // 자동 형 변환
f = i;
System.out.println(f); // 결과 값 : 10.0
f = l;
System.out.println(l); // 결과 값 : 10
}
}
public class OperationCasting {
public static void main(String[] args) {
// TODO Auto-generated method stub
short s = 10; // 00000000 00001010
int i = 65537; // 00000000 00000001 00000000 00001010
int i1 = s + i; // 2byte + 4byte (자동 형 변환 발생)
System.out.println(i1); // result : 65547
int i2 = 10;
double d = 170.5;
double d1 = i2 + d; // 4byte + 8byte (자동 형 변환 발생)
System.out.println(d1); // result : 180.5
System.out.println(10 + 20); // 4byte + 4byte
byte b = 10;
byte b1 = 20;
// byte b2 = b + b1; // 2byte + 2byte 이므로 연산 불가
int b2 = b + b1;
System.out.println(b2); // result : 30
short s1 = 10;
short s2 = 20;
int i3 = s1 + s2;
System.out.println(i3);
float f1 = 10.5f;
float f2 = 20.5f;
float d2 = f1 + f2;
System.out.println(d2); // result : 31.0
double d3 = f1 + 100.5; // 4byte + 8byte (자동 형 변환 발생)
System.out.println(d3); // result : 111.0
}
}
연산식에서도 자동 형 변환이 발생한다.
정수는 4byte로 연산
따라서 short/byte는 연산 시 부호비트 때문에 음수가 나오는 경우도 있다.
실수는 8byte로 연산
따라서 float 또한 형 변환이 일어난다.
강제 형 변환
: 크기가 큰 값을 작은 크기로 변환하는 것을 강제 형 변환이라고 한다.
(자료형을 역순으로 자동으로 변환하는 법은 없다.)
public class Casting {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 10; // 00000000 00000000 00000000 00001010
short s = (short)i; // 00000000 00001010
System.out.println(i); // 결과 값 : 10
i = 65537; // 00000000 00000001 00000000 00000001
s = (short)i; // 00000000 00000001
System.out.println(s); // 결과 값 : 1
}
}
값이 잘리는 경우가 발생하여 원하는 값과 다른 값을 가져오는 경우도 있다.
public class Casting {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 10; // 00000000 00000000 00000000 00001010
short s = (short)i; // 00000000 00001010
System.out.println(i); // 결과 값 : 10
i = 65537; // 00000000 00000001 00000000 00000001
s = (short)i; // 00000000 00000001
System.out.println(s); // 결과 값 : 1
float f = 15.5f;
int i1 = (int)f;
System.out.println(i1); // 결과 값 : 15
}
}
실수를 정수로 강제 형 변환을 하면 정수 값만 저장이 된다.