- Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
- Section 0. 자바 기본 익히기
- 4강 "변수와 자료형(3)"
- 상수 -> 리터럴 -> 형 변환
public class Constant {
public static void main(String[] args) {
final float PI = 3.14F;
PI = 3.15F; //error! final로 선언된 값은 변경 불가
}
}
Eclipse에서 실행하면 에러가 나는 것을 확인할 수 있다.
public class ImplicitConversion {
public static void main(String[] args) {
byte bNum = 10;
int num = bNum; //byte보다 int가 더 크기 때문에 묵시적 형 변환
System.out.println(num);
long lNum = 10; //10은 int값인데 long이 더 크기 때문에 L을 붙이지 않아도 묵시적 형 변환
float fNum = lNum; //long보다 float이 더 정밀한 수이기 때문에 묵시적 형 변환
System.out.println(fNum);
double dNum = fNum + num;
// fNum(float)과 num(int)를 더할 때 int가 float으로 묵시적 형 변환
// 더한 결과(float)이 더 정밀한 double로 묵시적 형 변환
System.out.println(dNum);
}
}
형 변환을 명시적으로 작성하지 않아도 자동으로 형 변환이 발생하여 정상 출력되는 것을 확인할 수 있다.
public class ExplicitConversion {
public static void main(String[] args) {
int iNum = 1000;
byte bNum = (byte)iNum;
// 1000은 2진수로 0011 1110 1000
// byte는 1바이트(8비트)이므로 뒤쪽의 1110 1000 값만 대입됨
System.out.println(iNum);
System.out.println(bNum); // 1110 1000 은 10진수로 -24
double dNum = 3.14;
iNum = (int)dNum;
System.out.println(iNum);
float fNum = 0.9F;
int num1 = (int)dNum + (int)fNum; //각각을 형변환 후 덧셈 3+0=3
int num2 = (int)(dNum + fNum); //덧셈 후 형변환 3.14+0.9=4.04 -> 4
System.out.println(num1);
System.out.println(num2);
}
}
명시적 형 변환을 할 경우 데이터가 원하지 않는 값으로 바뀔 수 있다는 것을 예시를 통해 확인 할 수 있다.