[궁금증] Java에서 Integer와 int의 차이는?

FFTL:)·2021년 10월 25일
0

 종종 자바를 이용하여 코딩테스트 문제를 풀 때에 궁금증이 발생한 적이 있다. 코딩테스트를 공부하며 너무 자연스럽게 사용하고 있었지만 뭔가 이상한 점이었던 것이다.

//arrayList 선언
ArrayList<Integer> arr = new ArrayList<>(); 	//얘는 되고
ArrayList<int> arr = new ArrayList<>();		//얘는 왜 안되지?

위와 같은 궁금증 이었다. 이와 비슷한 경우로 <Booelan> 은 되고 <boolean>은 선언이 되지 않았다. 혹시나 실험을 해보았다.

Integer a = 1;
int b = 2;

System.out.println(a+b);

>3

두 가지는 위의 모습처럼 산술도 되었고

ArrayList<Integer> arr = new ArrayList<>();
arr.add(1);
arr.add(2);

for(int a: arr){
    System.out.println(a);    
}

>1
>2

위의 모습처럼 알아서(?) 변환이 되고 있었다.

그래서 궁금증이 생겼고 구글 검색을 하게 되었다. 그리고 꽤나 많은 글들이 이를 설명해 주고 있었고, 궁금증은 금방 해결할 수 있었다.

해결

Integer는 Wrapper 클래스로 객체를 표현하게 된다.
int는 기본 자료타입(primitive type)으로 우리가 흔히 아는 정수로 사용할 수 있다.

이 두 가지는 서로의 변환이 가능하게 되어있는데
Integer => int 를 Boxing
int => Integer 를 unBoxing 이라고 한다.

이 두 가지는 몇가지의 차이점을 가지게 된다.

  1. Integer는 위에서 말한 객체로 null 값을 가질 수 있다. 반면 int는 null 값이 할당 되게 되면 error를 발생시킨다.

  2. 테스트를 진행해 보지는 못했지만 Integer는 산술 연산을 할 수 없다고 한다. 하지만 대부분의 상황에서는 자동적으로 Boxing, unBoxing이 이루어져 똑똑하게(?) 산술에 참여하게 되어서 저 위에서 실험 해본 것 과 같은 현상이 발생한 것이었다. (실험을 해보지 못해서 확실하진 못하다ㅠ)

(공부한 출처) 훨씬 자세하게 정리되어 있다. 더 궁금하다면 !!
https://includestdio.tistory.com/1
https://coding-factory.tistory.com/547

profile
생각하는 개발자가 되자!

1개의 댓글

comment-user-thumbnail
2022년 5월 29일

Integer => int 를 Boxing
int => Integer 를 unBoxing 이라고 한다.

라고 적혀있는데

거꾸로 되었습니다.
기본타입을 wrapper객체로 만드는걸 Boxing(int기본 ->Integer)/ 언박싱은 그 반대입니다.

답글 달기