자바에서의 배열은 같은 타입의 변수들로 이루어진 유한한 집합이다.
배열을 구성하는 각각의 값을 요소(element), 위치를 가리키는 숫자는 인덱스(index)라고 하며 배열의 인덱스는 0부터 시작한다.
배열을 선언하게 되면 stack 영역에 배열의 변수명을 할당하고 이 변수는 배열의 데이터 값이 연속적으로 저장되어있는 heap 메모리의 주소값을 참조한다.
(배열의 첫 요소의 주소가 배열 객체의 메모리 주소 )
배열의 메모리 공간
배열의 주소 구조
// 배열을 선언 하는 방법
// 크기를 미리 지정해주는 방법
int[] arr = new int[5];
int arr[] = new int[5];
// 값을 먼저 넣어주는 방법
int[] arr = {1, 2, 3, 4, 5};
int arr[] = {1, 2, 3, 4, 5};
// 배열에 요소에 값을 할당해주는 예시
int[] score = new int[10];
core[0] = 100;
score[1] = 50;
score[2] = 70;
// or
for( int i=0; i<score.length; i++) {
score[i] = 100;
System.out.println("score["+ i +"] : "+ score[i]);
}
배열을 선언 할때 크기를 미리 지정해주어야 하는 이유 ?
배열이 선언 될때 배열의 값이 heap 메모리에 연속적으로 저장되어야 하기 때문에 선언된 배열의 크기 만큼 미리 확보해주어야 한다.
배열을 한번 선언 하면 크기를 변경할 수 없는 이유 ?
메모리상에서 배열의 뒤에 이미 다른 값이 존재할 수도 있기때문이다.
// 선언 방식
int arr[][] = new int[2][4];
int[][] arr = new int[2][4];
int arr[][] = {{1, 2, 3},{4, 5, 6}};
int[][] arr = {{1, 2, 3},{4, 5, 6}};
// 2차원 배열 예제
String[][] royal = new String[4][4];
System.out.println(" _ROYAL아파트_");
for (int i = 0; i < royal.length; i++) {
for (int j = 0; j < royal[i].length; j++) {
royal[i][j] = i+"층 "+j+"호";
System.out.println("| "+i+"층 "+j+"호 |");
}
System.out.println(" ------------");
}
결과
// 선언
int arr[][][] = new int[2][3][4];
int arr[][][] = {{1, 2, 3},{4, 5, 6}};
int[][][] arr = {{1, 2, 3},{4, 5, 6}};
// 3차원 배열 예제
String royal[][][] = new String[4][4][3];
System.out.println(" _ROYAL 아파트_");
for(int i=0; i<royal.length; i++) {
for(int j=0; j<royal[i].length; j++) {
for(int k = 0; k<royal[i][j].length; k++) {
System.out.println("| "+i+"층 "+j+"호 "+k+"번방"+" |");
}
}
System.out.println(" -------------");
}
결과