int[] & Integer[] 차이와 변환 방법

yelosta·2023년 11월 1일
0

Java에서 숫자와 관련된 데이터 타입은 많습니다.
이번 시간에는 그 중에서 Integer과 int에 대해서 알아보겠습니다.

int와 Integer은 뭐가 다를까요?

intInteger
기본 데이터 유형 (Primitive data type)객체 래퍼 클래스 (wrapper class)
정수 값을 저장, 32비트의 고정 크기int값을 감싸고 객체로 다룰 수 있게 해줌
기본값은 0이며, null 허용 Xnull을 허용하며, 다양한 유틸리티 메소드를 포함하여 int 값 처리에 유용

int와 Integer에 저장된 값은 일반적인 사용에서는 호환이 가능합니다.(autoboxing)

int a = 1;
Integer b = a + 2; //3

하지만 배열에서는 호환이 안됩니다.

Why?

  • 데이터 유형의 차이:
    int[]는 primitive type의 배열을 나타내고, Integer[]는 Integer 객체의 배열을 나타냅니다. int는 Stack 메모리에 저장되고, Integer는 Heap 메모리에 저장됩니다.

  • 언박싱(boxing) 및 박싱(unboxing) 필요 :
    int[]에서 Integer[]로 또는 그 반대로 변환하려면 원시 int 값을 Integer 객체로 박싱하거나 그 반대로 언박싱해야 합니다. 이 작업은 자동으로 수행되지 않으므로 명시적으로 처리해야 합니다.

(박싱) int[] -> Integer[]

흐름은 다음과 같습니다

int배열 -> int스트림 -> Integer스트림 -> Integer배열

//int 타입의 배열을 생성해서 값을 {1, 2, 3}으로 초기화
int[] intArray = {1, 2, 3};

//int[] -> int스트림
IntStream intStream = Arrays.stream(intArray);
//int스트림 -> Integer스트림
Stream<Integer> integerStream = intStream.boxed();
//Integer스트림 -> Integer[]
Integer[] array = integerStream.toArray(Integer[]::new);

(언박싱) Integer[] -> int[]

흐름은 역순입니다.

Integer배열 -> Integer스트림 -> int스트림 -> int배열

//Integer[] 생성 및 초기화
Integer[] integerArray = {1, 2, 3};

//Integer[] -> Integer스트림
Stream<Integer> integerStream = Arrays.stream(integerArray);
//Integer스트림 -> int스트림
IntStream intStream = integerStream.mapToInt(Integer::intValue);
//int스트림 -> int[]
int[] intArray = intStream.toArray();
profile
노란 별의 기록 저장소

0개의 댓글