[Java 02] 배열 생성과 주의 사항, 다차원 배열

배열 만들기

  • 배열 생성 시 배열 타입에 대한 default 값으로 초기화

 

배열 초기값

자료형 초기값
int 0
double 0.0
char '0'
boolean false
String null
사용자 정의 class null

 

생성과 동시에 값 할당하기

int[] b = new int[] {1, 3, 5}; // new int[] 는 생략 가능
int[] b = {1, 3, 5};

 

주의 사항

선언과 생성을 따로 하는 경우

  • 초기화할 때 꼭 'new T[ ]'를 같이 적어줘야 한다.
// X
int[] a;
a = {1, 3, 5}; // 컴파일오류, Array constants can only be used in initializers 이 에러 문구 나옴.

// O
int[] a;
a = new int[]{1, 3, 5};

 

 

* Array is Immutable

  • 배열은 변경 불가능하다.
  • 즉 배열은 최초 메모리 할당 이후 변경할 수 없음.
  • 아래 코드와 그림을 같이 보자.
// a는 엄밀히 말해서 배열이 아니고, 배열을 가리키고 있는 레퍼런스 타입의 변수
int[] a = {1, 2, 3};

// a라는 변수에 새로운 값을 할당한 것.
a = new int[]{4, 5, 6, 7};
  • 0X100 배열이 바뀐게 아니라 a가 가리키는 배열을 0X200으로 바꾼 것이다.

 

 

다차원 배열

int a;
int[] arr;
int[][] arr2;
  • a의 타입 : int
  • arr의 타입 : int의 배열
  • arr이 저장하는 데이터의 타입 : int
  • arr2의 타입 : int의 2차원 배열
  • arr2에 저장하는 데이터의 타입 : int의 배열

 

2차원 배열 동시에 선언, 생성, 할당

int[][] arr = {{0, 1, 2}, {0, 1, 2}, {0, 1, 2}, {0, 1, 2}};

 

 ✔️ 4 X ? , 2차원 배열 만들기

  • 배열이 꼭 정사각형일 필요는 없다.
// 1, 2차 배열 선언 & 1차 배열 생성
int[][] arr = new int[4][];

// 1차 배열만 생성 후, 2차 배열 생성
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = {1, 2, 3}; // X
arr[2] = new int[] {1, 2, 3}; // O

 

✔️배열 생성이 올바르지 않은 것 찾기

int arr[][] = new int[2][3]; // O
int[] arr[] = new int[2][3]; // O
int[][] arr = new int[2][3]; // O
int[][] arr = new int[4]{1, 2}; // X, error 발생
int[][] arr = new int[][] {{2, 3}, {0, 1}}; // O
int[][] arr = {{2, 3}, {0, 1}}; // O

 

 

 ✔️2차원 배열의 메모리 사용