서로 다른 자료형을 연산 혹은 대입하는 경우, java 컴파일러가 자료형을 통일, 이 과정에서 발생하는 형변환을 암묵적 형변환이라고 함
int a = 100; // 정수형
float b = a; // 정수형을 실수형에 대입
암묵적 형변환은 어떤 변수가 더 큰 범위의 변수로 대입 가능함을 의미함
/// 정수 -> 실수 = 암묵적 형변환(데이터 손실 없음)
/// 실수 -> 정수 = 명시적 형변환(데이터 손실 유)
암묵적 형변환이 허용되는 범위 : 암묵적 형변환은 데이터의 손실이 발생하지 않는 범위 내에서만 이루어짐
ex) double형 데이터를 20.5를 int에 대입하는 경우에는 0.5에 대한 데이터 손실이 불가피하므로 -> 에러 발생
/// int에서 바로 double로 가도 됨
package casting;
public class Main01 {
public static void main(String[] args) {
short s = 100;
int i = s;
long l = i;
float f = l;
double d = f;
System.out.println("s = " + s);
System.out.println("i = " + i);
System.out.println("l = " + l);
System.out.println("f = " + f);
System.out.println("d = " + d);
System.out.println("------------------");
int myage1 = 20;
double myage2 = myage1;
System.out.println("myage1 : " + myage1);
System.out.println("myage2 : " + myage2);
System.out.println("------------------");
char c1 = 'a'; //97
int num1 = c1;
System.out.println("num1 = " + num1);
}
}
package casting;
public class Main02 {
public static void main(String[] args) {
long l = 100L;
int i = (int)l;
short s = (short)i;
System.out.println("l : " + l);
System.out.println("i : " + i);
System.out.println("s : " + s);
System.out.println("------------------");
double pi1 = 3.14D;
// 큰 범위의 변수를 작은 범위의 변수에 대입하는 것은 에러
// int pi2 = pi1;
// 명시적 형변환이 필요
int pi2 = (int)pi1;
System.out.println("pi1 : " + pi1);
System.out.println("pi2 : " + pi2);
}
}
package casting;
public class Main03 {
public static void main(String[] args) {
double a = 10.5D;
float b = 20.5F;
/*
* 큰 범위의 변수와 작은 범위의 변수가 연산을 수행하면,
* 작은 범위의 변수가 큰 범위의 데이터형으로 암묵적 형변환을 수행
* 그러므로 아래의 a+b는 double형의 변수가 되므로
* float형의 값에 대입하는 것은 에러
*/
// float f = a + b;
float f = (float)(a+b);
System.out.println(f);
double d = a + b;
System.out.println(d);
}
}