현재
타입 캐스팅(Type Casting) 본문
데이터 타입이 일치하지 않으면 Syntax오류가 발생하므로 주의 해야한다.
타입을 맞춰주기 위해서 강제 타입 캐스팅을 하는데 값을 변경하면서 오류가 발생한다.
여기서 궁금했던 점은 작은값을 큰값으로 옮기는데는 메모리가 부족하니까 당연히 오류가 발생하지만
왜 큰 값에서 작은 값으로 옮길때도 오류가 발생하는지 찾아봤다.
찾아보니 타입 캐스팅이 단순히 메모리 공간에서 맨 왼쪽의 값을 버리는걸로 진행되는게 아니라 조금 더 복잡한 일련의 과정이 있기 때문에 오류가 난다는 것을 알게 되었다. (지금은 아직 공부할게 많아서 이 정도까지만 알고 넘어가기로 했다.... 나중에 더 자세히 찾아볼 기회가 있으면 좋겠다.)
public class P2 {
public static void main(String[] args) {
byte a1 = 10; // Data type이 일치하지 않으면 대부분 Syntax 오류가 발생한다.
double a3 = 0.1; //
// int a2 = a3; // Type miss match 라고 부른다.
int a2 = a1; // byte를 int로 type casting(묵시적)해서 넣어준다.
int a4 = a2; // int에 int 대입이라 정상
// byte a5 = a4; // Type miss match, byte를 int에 넣는거
byte a5 = (byte)a4; // 강제 타입 캐스팅(명시적)
// 사실상 - 명시적 타입 캐스팅을 해야하는 경우는 값의 증발이 발생
// 왼쪽에 있는 큰 bit를 버린다(오류가 커지니까 일부러 발생시키는 버그가 아닌이상에는쓰지않는다)
double b1 = a4; // 타입 캐스팅 발생! 작은수를 큰수에 넣으니까.
double b2 = (double)a4;
double b3 = 10; // 10.0까지 안써주면 type casting 발생했음
int b4 = '안';
//단위는 전부 bit이다.
//char(1)<byte(8)<short(16)<int(32)<=float(32)<double(64)<=long(64)
double c1 = 10.1;
int c2 = (int)c1; // 무조건 자름 결과값 c1 = 10으로 저장
char d1 = 'A';
System.out.println(d1); // 어떤 타입이건 다 넣을수 있다. 해당타입에걸맞는출력
System.out.println((int)d1);
int d2 = 100;
System.out.println(d2);
System.out.println((char)d2); // char = 'a' -> 97
}
}'Java > 문법들' 카테고리의 다른 글
| 기초 문법( + 예제 ) (0) | 2023.09.28 |
|---|---|
| Java의 특징 (0) | 2023.09.19 |
| 증감 연산자 (0) | 2023.09.11 |
| 리터럴, 진법들 (0) | 2023.09.11 |
| 변수 타입의 종류들(기본 타입, 참조 타입) (0) | 2023.09.11 |