왜 int i = 1024 * 1024 * 1024 * 1024;가 에러 없이 컴파일되는거죠?


int의 표현 범위가 -2147483648 부터 2147483647이잖아요. 그래서 int i = 2147483648;이렇게 하면 이클립스에서는 "2147483648"에 빨간 밑줄 생기잖아요. 근데 int i = 1024 * 1024 * 1024 * 1024;이거는 잘 컴파일 돼요.

public class Test {
    public static void main(String[] args) {        

        int i = 2147483648;                   // 에러
        int j = 1024 * 1024 * 1024 * 1024;    // 에러 안남

    }
}

기본적인 질문이기한데 왜 그런건가요?

  • 2016년 01월 29일에 작성됨

조회수 258


1 답변


좋아요
0
싫어요
채택취소하기

저 구문에는 아무 문제가 없습니다. 그건 단지 4개의 숫자를 곱하는 연산이고 오버플로우가 발생할 뿐입니다. 저건 단지 하나의 문자를 할당하는거랑은 다른데 컴파일 타임에서는 경계 검사를 합니다.

System.out.println(2147483648);        // error
System.out.println(2147483647 + 1);    // no error

이런 구문에서는 문자열이 경계를 넘었나 검사를 합니다. 만약 경계를 넘으면 할당되지 않습니다.

System.out.println(2147483648L); // no error 문자열에 Long이라는것을 알려주면 컴파일이 잘됩니다.

  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close