
- overflow : 메모리의 표현 범위에서 벗어난 수의 값을 저장하는 경우
- underflow : 메모리가 표현할 수 있는 수보다 적은 수의 값을 저장하는 경우
Java는 정적언어로 컴파일할 때 변수의 타입이 결정되기 때문에 변수를 선언할 때에는 자료형을 별도로 지정해주어야 한다.
이처럼 정적언어에서의 자료형은 데이터를 표현할 수 있는 범위가 정해져 있기 때문에 변수 범위 밖으로 넘어가게 되면 예상치 못한 값들이 반환되게 된다.
package casting;
public class Casting2 {
public static void main(String[] args) {
long a = 2147483647; // int의 최고값
long b = 2147483648L; // int의 최고값 + 1(초과)
int intValue = 0;
// int형의 최고값 즉 int 자료형의 범위 안에 들어가기 때문에 정상 출력
intValue = (int) a;
System.out.println("intValue = " + intValue); // 2147483647
// int의 범위를 초과했기 때문에 int의 가장 작은 범위로 출력이 됨 (오버플로우)
intValue = (int) b;
System.out.println("intValue = " + intValue); // -2147483648
}
}
