1. 얕은 복사
배열의 주소값만 가져와 참조형 변수(배열명)에 저장하고 하나의 배열 객채를 두 변수가 참조 하는 것.
int[] arr = new int[4];
for(int i = 0; i<arr.length; i++){
arr[i] =i;
}
int[] arr2 = arr;
System.out.println("arr의 주소 : "+ arr);
System.out.println("arr2의 주소 : " + arr2);
System.out.println("arr의 값 : " + Arrays.toString(arr));
System.out.println("arr2의 값 : " +Arrays.toString(arr2));
얕은 복사의 경우 같은 배열객체를 공유하기 때문에, 한쪽의 값이 변경하면 다른 쪽의 값도 똑같이 변경되서 나온다.
arr[2] = 1;
System.out.println("arr의 값 : " + Arrays.toString(arr));
System.out.println("arr2의 값 : " +Arrays.toString(arr2));
arr2[3] = 2;
System.out.println("arr의 값 : " + Arrays.toString(arr));
System.out.println("arr2의 값 : " +Arrays.toString(arr2));
2.깊은 복사
새로운 배열 객체를 생성하고, 기존 배열 객체의 데이터를 복사해 사용하는 것
이 경우 각각 다른 배열 객체이기 때문에 한쪽이 변경되도 영향을 주지 않는다.
다만 복사길이가 복사 받는 배열의 크기를 넘어갈 경우에러가 발생한다.
복사 하는 이유: 배열의 크기는 한번 선언하면 변경이 안되기 때문에 새로운 배열을 새로운 크기로할당을 하여 복사를 하거나, 값을 저장해 놓은 후, 재 할당을 해줘야 한다.
1) 복사 방법
int arr[] = new int[4];
int arr2[] = new int[arr.length];
arr[0] = 2;
arr[1] = 3;
arr[2] = 4;
arr[3] = 5;
.1 for문을 이용한 복사 방법
for (int i = 0; i < arr2.length; i++){
arr2[i] = arr[i];
}
한쪽이 변경되도 영향을 받지 않는다.
.2 메소드를 이용한 복사방법
ㄱ)System.arraycopy(원본배열,원본의 복사 시작 인덱스, 복사용 배열 ,복사받을 시작 인덱스 , 복사할 길이 );
단 이 경우
복사의 총 길이가 복사용 배열 크기보다 크거나,
원본 시작 인덱스+ 복사할 길이가 원본 크기보다 크면
에러가 발생한다.
ㄴ)복사 배열 = 원본배열.clone();
이 경우 복사 배열은 원본과 동일한 크기, 동일한 값의 다른 배열 객체다.
'JAVA > 배열 및 2차원배열' 카테고리의 다른 글
2차원 배열 (0) | 2019.12.14 |
---|---|
배열 (0) | 2019.12.14 |