자바의 정수를 표현하기 위한 자료형은 int, long 등이 있습니다.
정수형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
---|---|---|
byte | 1 바이트 | -128 ~ 127 |
short | 2 바이트 | -2^15 ~ (2^15 -1) -32,768 ~ 32,767 |
int | 4 바이트 | -2^31 ~ (2^31 -1) -2,147,483,648 ~ 2,147,483,647 |
long | 8 바이트 | -2^63 ~ (2^63 -1) -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
위 수의 범위는 외우기 어렵기 때문에, Wrapper 클래스의 상수인 MIN_VALUE 와 MAX_VALUE를 출력하여 확인이 가능하다는 정도만 알고 있으면 됩니다.
💡
long 변수에 값 대입 시, 숫자 값이 int 자료형의 최대값보다 큰 경우 'L' 과 같은 접미사를 붙여줘야 합니다.
만약, 접미사 누락 시 컴파일 에러가 발생합니다.
정수형 데이터 타입 사용 시 반드시 자신이 사용하고자 하는 데이터 타입의 최소와 최대 크기를 고려해야 합니다.
만약, 해당 타입이 표현할 수 있는 범위를 벗어난 데이터 저장 시, 오버플로우(overflow)가 발생하여 전혀 다른 값이 저장될 수 있기 때문입니다.
byte max = 127;
byte min = -128;
for(byte i = max; i < 129; i++){ // 무한 루프
System.out.println(i);
}
위 코드는 무한로프에 빠지게 됩니다. 일반적인 생각으로는 127, 128 까지 출력 후 반복문이 종료될 것이라고 생각하지만, byte 자료형의 범위를 넘기게 되면, 이는 127 다음에 -128,-127,-126 ... 0, 1, ... 126, 127, -128이 반복적으로 출력되게 됩니다.
이처럼 의도치 않은 결과를 출력하게 되기 때문에, 자료형의 크기를 알맞게 선언해줘야 합니다.
언더스코어 표기법은 JDK 7 버전 부터 지원하는 문법으로, 우리가 큰 숫자를 콤마로 표현하듯이 자바에서 콤마 대신 언더바(_)로 표현하여도 컴퓨터에서는 콤마로 인식하도록 하는 표기법입니다.
int num = 1_000_000; // 1,000,000
8진수와 16진수 정수는 int 자료형을 사용하여 표시하지만, 숫자 앞에 기호를 붙여주어서 이 둘을 구분할 수 있습니다.
int octal = 011;
System.out.println("8진법(octal) : " + octal); // 9
int hex = 0xA;
System.out.println("16진법(hex) : " + hex); // 10
int binary = 0b1011;
System.out.println("2진법(binary) : " + binary); // 11