배열 복사
- 배열은 한 번 생성하면 길이를 변경할 수 없으므로 더 많은 저장 공간이 필요하다면 더 큰 길이의 배열을 새로 만들고 이전 배열의 항목을 복사해야함
얕은 복사
- 배열의 주소값만을 복사
- 원본과 복사본 모두 하나의 주소값을 가지고 있음
- 복사본 값을 수정하면 원본도 수정됨
int [] origin = {1,2,3,4,5};
int [] copy = origin;
깊은 복사
- 동일한 새로운 배열을 하나 생성해서 실제 내부값들을 복사
- 원본과 복사본이 다른 주소값을 가지고 있음
- 복사본 값을 수정해도 원본 값은 수정되지 않음
for문을 이용한 배열 복사
메소드를 이용한 배열 복사 (얕은 복사)
- 번지 복사가 되어 참조하는 String 객체는 변함이 없음
- System.arraycopy
- 몇번 인덱스부터 몇개를 어느 위치의 인덱스에 복사할건지 다 직접 지정 가능
System.arraycopy(원본배열, 원본배열복사 시작인덱스, 새배열, 새배열 붙여넣기 시작인덱스, 복사 항목수);
- Arrays.copyOf
- 무조건 원본배열의 0번 인덱스부터 내가 지정한 갯수만큼 복사가 진행됨.
- 내가 제시한 길이가 원본배열보다 크다면 나머지는 0으로 채워서 복사해줌.
public void method4() {
int [] origin = {1, 3, 5, 7 ,9};
복사본 배열 = Arrays.copyOf(원본 배열명, 복사할 갯수);
int [] copy = Arrays.copyOf(origin, 7); // 복사할 갯수 == copy 배열의 크기
System.out.println(Arrays.toString(copy));
}
- clone
- 인덱스 x ,복사할갯수 x 원본배열과 똑같이 생성
- clone()함수는 Arrays클래스에서만 깊은 복사를 지원함
- 그 외의 클래스에서는 얕은복사(주소값 복사)를 지원함
public void method5() {
int [] origin = {1 ,2 ,3 , 4 ,5};
// 복사본 배열 = 원본 배열.clone();
int [] copy = origin.clone();
}