728x90
1.얕은 복사
: 주소를 복사하여 서로 다른 두 변수가 하나의 배열(또는 객체)를 참조하는 상태를 만드는 복사방법
: 서로 같은 주소를 가지고 있다.
int [] arr = {1,2,3,4,5};
//1. for문을 이용한 깊은 복사
int [] copyArr1 = new int[arr.length];// 5칸자리 배열이 생성
for(int i =0;i <arr.length ;i++) {
copyArr1[i]= arr[i];
}
//2. System.arrycopy(
//(원본배열,원본 복사 시작 인덱스,복사배열, 복사배열의 삽입 시작 인덱스, 복사길이);
int[] copyArr2= new int[arr.length];
System.arraycopy(arr, 0, copyArr2, 0, arr.length);
//3.복사할 배열 참조 변수 ==Arrays.copyof(원본배열,복사할 길이)
int [] copyArr3 = Arrays.copyOf(arr, arr.length);
//값 변경 후 확인
copyArr1[4]=0;
copyArr2[4]=999;
copyArr3[4]=9099;
System.out.println("arr :" +Arrays.toString(arr));// 1 2 3 4 5
System.out.println("copyArr1 :" +Arrays.toString(copyArr1)); // 1 2 3 4 0
System.out.println("copyArr2 :" +Arrays.toString(copyArr2));// 1 2 3 4 999
System.out.println("copyArr3 :" +Arrays.toString(copyArr3)); //1, 2, 3, 4, 9099
2.깊은 복사
: 같은 자료형의 새로운 배열을 만들어서 기존 배열의 데이터를 모두 복사하는 방법
: 서로 다른 주소를 가지고 있다.
int[] arr = {1,2,3,4,5};
int[] copyArr= arr;
//주소복사
System.out.println("arr : "+arr); // [I@39ed3c8d
System.out.println("copyArr : "+copyArr); // [I@39ed3c8d
//배열값 출력
System.out.println("arr :" +Arrays.toString(arr)); // [1,2,3,4,5]
System.out.println("copyArr :" +Arrays.toString(copyArr)); // [1,2,3,4,5]
//얕은 복사한 배열의 값을 변경
copyArr[2] =999;
System.out.println("arr :" +Arrays.toString(arr)); //[1, 2, 999, 4, 5]
System.out.println("copyArr :" +Arrays.toString(copyArr)); //[1, 2, 999, 4, 5]
728x90
'ON > JAVA' 카테고리의 다른 글
9일차_드디어 객체지향 (0) | 2023.04.27 |
---|---|
8일차_ 2차원 배열 (0) | 2023.04.26 |
7일차 _ 배열 (0) | 2023.04.24 |
6일차_for중첩 반복문 /while 반복문 (0) | 2023.04.22 |
1주차_지금까지 이해하지 못한 것 개념이 확실하지 않는 것에 대해서 정리 (0) | 2023.04.21 |