작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다
ex) int -> long -> double
- 큰 범위에서 작은 범위는 다음과 같은 문제가 발생할 수 있다
- 소수점 버림
- 오버플로우
하지만 결국에는 대입하는 타입을 맞추어야 한다
실제로는 이런 과정이 자바에서 자동으로 일어난다
그래서 이런 경우를 자동 형변환, 또는 묵시적 형변환이라고 한다
큰 범위에서 작은 범위 대입은 명시적 형변환이 필요하다
형변환은 괄호에 변경하고싶은 데이터 타입을 넣어서 명시적으로 입력하면 된다
이것을 형(타입)을 바꾼다고 해서 형변환이라 하며, 영어로는 캐스팅이라 한다 그리고 개발자가 직접 형변환 코드를 입력한다고해서 명시적 형변환이라 한다
- 형변환을 한다고해서 doubleValue자체의 타입이 변경되거나 그 안에 있는 값이 변경되는 것은 아니다
- doubleValue에서 읽은 값을 형변환 하는 것이다
- doubleValue안에 들어있는 값은 1.5로 그대로 유지된다
- 변수의 값은 대입 연산자(=)를 사용해서 직접 대입할 때만 변경된다

- int형은 214783648L를 표현할 수 있는 방법이 없다 이렇게 기존 범위를 초과해서 표현하게 되면 전혀 다른 숫자가 표현되는데, 이런 현상을 오버플로우라 한다
- 보통 오버플로우가 발생하면 마치 시계가 한바퀴 돈 것처럼 처음부터 다시 시작한다 -2147483648숫자는 int의 가장 작은 숫자이다
- 중요한 것은 오버플로우가 발생하는 것 자체가 문제라는 점이고, 오버 플로우 자체가 발생하지 않도록 막아야한다
계산을 할 때에도 형변환이 일어난다
아래의 코드를 살펴보자
위의 두 개의 결과와 아래 두 개의 결과는 다르다
자바에서의 계산은 2가지를 기억해야한다
1. 같은 타입끼리의 계산은 같은 타입의 결과를 낸다
- int + int는 int를, double + double은 double의 결과가 나온다
- 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다
- int + long은 long + long으로 자동 형변환이 일어난다
- int + double은 double + double로 자동 형변환이 일어난다