본문 바로가기

개발참고

[Java] Integer와 Int의 차이

1. Primitive 자료형 - Wrapper 클래스 관계

 int

 primitive 자료형 (long, float, double ...)

 산술 연산이 가능하다.

 null로 초기화 할 수 없다.

 Integer

 Wrapper 클래스 (객체)

 Unboxing을 하지 않으면 산술 연산이 불가능 하지만, null 값을 처리할 수 있다. 

 null 값 처리가 용이하기 때문에 SQL과 연동할 경우 처리가 용이하다.

 DB에서 자료형이 정수형이지만 null 값이 필요한 경우 VO에서 Integer를 사용할 수 있음.

 


 

2. int와 Integer간의 변환

- Boxing과 Unboxing이라고 한다.

Boxing

 Primitive 자료형 -> Wrapper 클래스

Unboxing 

 Wrapper 클래스 -> Primitive 자료형

- 예제 코드

// to int i from Integer ii int i = ii.intValue(); // to Integer ii from int i Integer ii = new Integer( i );

- valueOf()와 parseInt()의 차이

 Integer.valueOf(String)

 Integer 클래스를 리턴하기 때문에 산술 연산을 할 수 없다.

 Integer.parseInt(String)

 int 형을 리턴하기 때문에 산술 연산을 할 수 있다.

※ 정수로 파싱할 수 없는 String을 파라미터로 전달하면 에러

 


 

3. Auto boxing / unboxing

- 자바에서는 모든 경우는 아니지만 대부분의 경우에는 자동으로 boxing / unboxing을 해준다.

- 예제 코드

int i = 1; Integer integer = i;    // int -> Integer (Auto boxing) int i2 = integer;    // Integer -> int (Auto unboxing)

 


 

4. int와 Integer의 사이즈를 비교하는 재미있는 실험

- 환경

 JRE

 jdk 1.5.0_15 

 OS

 Windows XP

- 조건

 Integer 및 int 배열을 1,000,000개 생성

- 결과

 Integer

 19986824 byte

 int

 3998536 byte

 Rate(Integer/int)

 4.99 (약 5배)

- 요약

- Object가 8 byte

- Integer가 16 byte

- Integer를 참조하는데 4 byte

- Integer의 사이즈 = 16 + 4 = 20 byte

- int의 사이즈 = 4 byte

-> 5배 차이

 

 

출처 : http://mindprod.com/jgloss/intvsinteger.html, http://blog.naver.com/nearfree/110038071441