물리적, 논리적으로 연속되어 있는 자료구조
길이는 고정적(Fixed-length)
중간 값이 비어있으면 오류 발생
만약 학생 10명의 변수가 필요한데 각각 하나씩 변수를 만들어 사용하면 관리가 힘들고 비효율적이다.
➔ 변수 사용 시 같은 자료형의 변수들을 묶어 한번에 관리 할 수 있다.
// 선언
자료형 [] 배열 이름;
: int [] arr;
자료형 배열이름 [] ;
: int arr [];
// 선언 & 크기 할당
int [] arr = new int[5];
// 선언 & 초기화
int [] arr = {1, 2, 3};
배열 이름.length ➡️ 배열의 길이를 알 수 있다.
int [] arr = new int[5];
arr [0] = 1;
arr [1] = 2;
System.out.println(arr.length);
length 필드는 배열의 초기화 된 값의 길이가 아닌 배열 크기 자체를 반환한다.
System.arraycopy(복사할 배열,복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수);
int [] arr1 = new int[3];
int [] arr2 = new int[5];
arr1 [0] = 1;
arr1 [1] = 2;
arr2 [0] = 3;
arr2 [1] = 4;
arr2 [2] = 5;
System.arraycopy(arr1, 0, arr2, 0, 2);
System.out.println("arr1 = " + Arrays.toString(arr1));
System.out.println("arr2 = " + Arrays.toString(arr2));
객체 배열이 아닌 기본 배열의 경우 직접 값을 초기화 해주지 않으면 0으로 초기화 된다. arr1 배열의 index 2 arr2 배열의 index 3-4는 0으로 출력되었다.
Book library [] = new Book[3];
과 같은 객체 배열은 생성 뒤 주소 값을 가진 공간만 생길 뿐 0으로 초기화 되지 않기 때문에 출력 시 null값이 나온다.
직접 하나씩 각각의 인덱스에 객체를 생성해주어야 한다.
ex)
library[0] = new Book("책이름", "출판년도");
library[1] = new Book("책이름", "출판년도");
System.arraycopy();
를 할 경우 주소가 복사되어 얕은 복사가 일어난다.