정수형의 경우 저장하려는 정수값의 범위에 따라 4개의 정수형 중에 하나를 선택하면 되겠지만, byte나 short 보다는 int형을 사용하는 것이 좋다.
byte, short의 경우 int형에 비해 약간의 메모리 절약이 가능하지만, 허용 범위가 작아 연산 시에 범위를 넘을 경우 잘못된 결과를 얻기가 쉽다.
JVM 피연산자 스택이 피연산자를 4byte 단위로 저장하기 때문에 4byte보다 작은 자료형(byte, short)의 값을 계산할 때는 4byte로 변환되어 연산이 수행된다. 따라서 오히려 int형을 사용하는 것이 효율적이다.
int형의 크기는 4byte(32bits)이므로, 표현할 수 있는 정수의 갯수는 2^32 ≒ 4 X 10^9
으로 약 40억이며, 표현 가능한 정수의 범위는 -2^31 ~ 2^31 -1
(±20억) 이다.
2^10 = 1024 ≒ 10^3 이므로, 2^32 = 2^10 X 2^10 X 2^10 X 4 ≒ 4 X 10^9
결론적으로 정수형 변수를 선언할 경우 int타입으로 하고, int의 범위(± 20억)를 넘어서는 수를 다뤄야 할 때는 long을 사용하면 된다.
연산과정에서 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버 플로우
라고 하며, 오버플로우가 발생했다고 해서 에러가 발생하는 것은 아니지만, 예상했던 결과를 얻지 못한다.
👨 생활 속 예시
최대값 + 1 → 최소값, 최소값 -1 → 최대값
부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생한다.
shor 타입의 표현 범위
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt()
System.out.println(n * n);
System.out.println(2);
br.close();
}
}