티스토리 뷰

자바(Java)

[java] 자바 int L

xemaker 2020. 9. 11. 16:37

자바를 하다보면 숫자 옆에 L 이 붙은게 있다. 12345L 이런식..

우선 자바에서 숫자형 중에 가장 많이 쓰이는 int를 살펴보면

Int

int는 integer(정수)의 약자이고 4 bytes(32 bits)의 크기를 가진 자료형으로 가장 보편적으로 쓰이는 정수형이기도 하다. 32 bits에는 4,294,967,296개의 숫자를 저장 할 수 있다. 2^32개를 저장 할 수 있다는 것만 이해하면 된다. 마찬가지로 반으로 나눠 반은 음수를 나머지 반은 0과 양수를 표현한다. 표현 할 수 있는 숫자의 범위는  -2,147,483,648 ~ 2,147,483,647이다.

정말 32 bits(4 바이트)인지 최대,최소 값은 어떻게 되는지 찍어보자.

package test;
public class Test {
	public static void main(String[] args) {
		System.out.println(Integer.SIZE);
		System.out.println(Integer.BYTES);
		System.out.println(Integer.MIN_VALUE);
		System.out.println(Integer.MAX_VALUE);
	}
}

 

결과:

32
4
-2147483648
2147483647

32 비트 4바이트 최소,최대값을 볼 수 있다.

최대값은

21억 4천 7백 4십 8만 3천 6백 4십 7.

이십 일억 사천 7백 사십 팔만 삼천 육백 사십 칠.

DB 키값으로 int 많이 쓰니 자바에서는 얼마나 커버 하고 있는지 알고 있으면 좋을듯.

 

그럼 int 의 양의 최대값을 int 변수에 대입해서 출력해보자.

package test;
public class Test {
	public static void main(String[] args) {
		int val = 2147483647;
		System.out.println(val);
	}
}

 

결과:

2147483647

그럼 int의 최대 허용량을 넘었을때를 보기 위해 1을 추가하면

package test;
public class Test {
	public static void main(String[] args) {
		int val = 2147483648;
		System.out.println(val);
	}
}

결과:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The literal 2147483648 of type int is out of range 

	at test.Test.main(Test.java:4)

 

리터럴 2147483648이 int 형의 범위를 벗어났다고 나온다.

Long

위의 int와 마찬가지로 Long에 대해서 찍어보면

package test;
public class Test {
	public static void main(String[] args) {
		System.out.println(Long.SIZE);
		System.out.println(Long.BYTES);
		System.out.println(Long.MIN_VALUE);
		System.out.println(Long.MAX_VALUE);
	}
}

결과:

64
8
-9223372036854775808
9223372036854775807

64비트 8바이트 최소,최대 크기를 알 수 있다.

그래서 정수형 크기가 작아서 변수 선언을 int대신에 long으로 바꾸면

package test;
public class LongTest {
	public static void main(String[] args) {
		long val = 2147483648;
		System.out.println(val);
	}
}

결과:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The literal 2147483648 of type int is out of range 

	at test.LongTest.main(LongTest.java:4)

 

왜 int를 long으로 바꿨는데 에러가 날까?

이유는 자바에서는 리터럴에 L을 안붙이면 정수라고 본다. 그러고 보면 정수에 특화되고 중요하다고 보는거 같음.

그래서 리터럴 끝에 L을 붙여줘야 long 타입으로 변한다. 

그래서 long이라고 L을 붙여보자.

package test;
public class LongTest {
	public static void main(String[] args) {
		long val = 2147483648L;
		System.out.println(val);
	}
}

 

결과:

2147483648

에러없이 long을 사용하고 있다. 대문자 L대신에 소문자 l도 사용이 가능하다.

package test;
public class LongTest {
	public static void main(String[] args) {
		long val = 2147483648l;
		System.out.println(val);
	}
}

 

결과:

2147483648

보이는가?

잘 보지 않으면 l이 숫자 1 처럼 보인다. 그래서 통상 l 대신에 L로 써준다. 그러고 보니 l이 파이프 | 처럼 보이기도 하네요..

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함