● 깊은 복사
배열의 요소는 동일하지만, 다른 메모리에 복사한다. 둘은 참조값이 다르다
- 직접 구현
int [] a ={1,2,3,4,5}; // 원본 배열
int [] b = new int [a.length]; // 깊은 복사를 할 때에는 원본 배열의 길이만큼만 복사배열이 존재 할 수 있다.
int i;
for (i=0;i<a.length;i++){
b[i] = a[i] //원본 배열을 복사배열로 할당
}
int[] a = { 1, 2, 3, 4, 5 }; // 원본 배열 생성
int[] b = new int[a.length]; // 복사 될 배열 - 복사 배열은 원본 배열과 동일 한 크기로 생성
int i;
for (i = 0; i < a.length; i++) {
b[i] = a[i]; // 원본 배열 요소를 b에 복사
}
System.out.println("원본배열");
for (i = 0; i < a.length; i++) {
System.out.println(a[i] + "\t");
}
System.out.println();
System.out.println("복사배열");
for (i = 0; i < b.length; i++) {
System.out.println(b[i] + "\t");
}
System.out.println();
System.out.println("배열 a의 참조값" + a);
System.out.println("배열 b의 참조값" + b);
b[1]=20;
System.out.println("b[1]변경후 배역 a 요소");
for (i = 0; i < a.length; i++) {
System.out.println(a[i] + "\t");
}
System.out.println();
System.out.println("b[1]변경후 배역 b 요소");
for (i = 0; i < b.length; i++) {
System.out.println(b[i] + "\t");
}
System.out.println();
해당 코드를 실행해 보면 알 수 있는 것 처럼. 배열의 요소만 같을 뿐, 참조값과 값 변경 후의 값이 다르다.
-API 메서드를 사용
시스템클래스에 arraycopy()를 활용
System.arraycopy(a, 0, b, 0, a.length);
System.arraycopy(원본배열, 원본배열 복사 시작위치, 복사대상배열, 복사 시작위치, 복사요소 갯수)
int[] arr1 = {10, 20, 30, 40, 50};
int[] arr2 = {1, 2, 3, 4, 5};
// 복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수
System.arraycopy(arr1, 3, arr2, 1, 2);
for(int i = 0; i < arr2.length; i++)
System.out.println(arr2[i]);
'JAVA' 카테고리의 다른 글
[JAVA] 자바 입력 값을 받아 배열 완성 (0) | 2023.02.21 |
---|---|
[JAVA] 자바 배열과 for 문 함께 사용 (0) | 2023.02.21 |
[JAVA] 자바 배열 복사 (얕은 복사) (0) | 2023.02.20 |
[JAVA] 자바 2차원 배열 (0) | 2023.02.20 |
[JAVA] 자바 배열 (0) | 2023.02.20 |