(char) (3 + '0') = '3'
'3' - '0' = 3
유니코드값 51 - 유니코드값 48 = 3
유니코드 값으로 계산 시, '어떤 숫자 문자'에서 '0'을 빼면 그 값이 나오게 되어있음.
3 + "" = "3"
'3' + "" = "3"
Integer.parseInt("3") = 3
Double.parseDouble("3.4") = 3.4
"3".charAt(0) = '3'
int -> char : (char) 65 > 'A'
char -> int : (int) 'A' > 65
Notice
char는 유니코드 문자표를 따르는데,
'A'는 유니코드 값이 65이다.
char ch = 'A'; 의 경우, 메모리에 'A'가 저장되는 것이 아니고, 유니코드값 65가 이진수로 저장된다.
float -> int : (int)1.6f > 1 // 반올림 되지 않고 버림
int -> float : (float)10 > 10.0f
작은 타입의 값을 큰 타입에 넣을 때는, 형변환 연산자를 사용해주지 않아도 된다. 컴파일러에 의해, 자동으로 형변환이 이뤄지기 때문이다. (생략 가능)
하지만, 큰 타입의 값을 작은 타입의 값에 넣을 때는 "값 손실"이 발생할 수 있기 때문에, 반드시 형변환 연산자를 사용해주어야 에러가 나지 않는다. (생략 불가)
ex1) float f = 1234; (o)
ex2) int i = 3.14f; (x / error)
-> 값 손실이 발생하기 때문에, 컴파일러가 자동으로 해결해줄 수 없다. 무조건 형변환 연산자를 사용해주어야 한다.
-> int i = (float) 3.14f; 로 변경
byte -> short, char -> int -> long -> float -> double