본문 바로가기
Study/Language

[Java] int, Integer, int[] .. ?

by jamiehun 2023. 4. 19.

1. int

- 기본 데이터 타입으로 정수의 바이너리 값만 저장한다. Integer에 비해 flexibility가 떨어진다.

- 메서드에서 value를 전달할 시에는 값만 전달한다.

 

2. Integer

- int 데이터 타입의 wrapper class이다.

- int 데이터 타입에 비해 flexibility가 높다. (저장, 변환, 조작 등에 관해서)

- 하나의 클래스이기 때문에 다양한 method에서 활용이 가능하다.

- 특히 컬렉션프레임워크에 포함되어 있는 List, Set, Map 등에서 자주 쓰일 수 있는데,

   int는 값만을 표시하지만 Integer는 하나의 정수 객체이기 때문이다.

   (java.util 패키지의 경우 objects만 다루며 그 속에 있는 자료구조들도 마찬가지

     => wrapper class가 유용하게 쓰임)

- 또한 멀티스레딩의 동기화에서도 유용하게 쓰일 수 있다.

Wrapper Class 예시

autoboxing

- 자동으로 primitive type -> object (wrapper class)로 변환하는 것

- 예시로는 int to Integer, long to Long, double to Double

Unboxing

- autoboxing의 반대라고 생각하면 된다 

- Integer to int, Long to long, Double to double

 

 

3. int[]

- 타입[] 변수 = new 타입[길이]; 와 같이 객체가 생성된다.

- 배열의 경우 연속된 공간에 값을 나열 시키고, 각 값에 인덱스를 부여해놓은 자료구조이다.

- 배열 변수의 참조 변수는 스택에 저장하고, 배열 자체는 객체로서 힙에 저장한다.

- 또한 이 배열의 경우 같은 타입의 값만 관리하며 배열의 길이는 늘리거나 줄일 수 없다.

- 또한 배열 변수를 미리 선언한 다음에 값 목록을 변수에 대입할 수 없다.

 

<불가능>

타입[] 변수;
변수 = {v1, v2, v2, ... , vn}

 

<가능>

타입[] 변수 = new 타입[]{v1, v2, v3, ... };

 

4. 논외로..  그럼 String은..?

- String도 객체이다.

- 하지만 조금 주의할 점은 문자열 리터럴로 대입하는 것new 연산자로 객체를 생성하는 것에는 차이가 있다.

 

String name1 = "jamiehun";
String name2 = "jamiehun";
String name3 = new String("jamiehun");

 

위의 코드에서 

name1, name2는 문자열 리터럴로 생성된 객체로서

name1 == name2는 true이다.

이유는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있기 때문이다.

 

반면에 name3는 String 객체를 별도로 생성했기 때문에

name1 == name3는 false이다.