- 얉은 복사- > 원본과 같은 주소값을 공유하는 복사입니다.
// 얉은 복사
int[] origin = {1,2,3,4,5}
//복사본 배열
int[] copy = origin;
//복사본 배열 수정
copy[2] = 99;
/* 실행결과: 원본과 복사본 배열 모두
1 2 99 4 5
이렇게 수정되었음
copy에 orgin의 주소값을 대입해주었기 때문에 원본 배열이 수정되는 결과를 낳는 것임
즉 원본배열을 참조하고 있음
*/
-깊은 복사 - > 원본과 동일한 새로운 배열을 만들고 실제 내부 값들을 복사합니다.
1번 방법) 몇번 인덱스부터 몇개를 어느 위치의 인덱스에 복사할껀지 다 직접 지정 가능
int[] orgin = {1,2,3,4,5};
int[] copy = new int[10];
//System.arraycopy(원본배열명, 복사를 시작한 인덱스, 복사본배열명, 복사될시작인덱스, 복사할 갯수);
System.arraycopy(origin,0,copy,0,5);
//copy를 출력하게 되면
//1 2 3 4 5 0 0 0 0 0
//원본배열은 값이 수정되지 않음.
//두개를 hashCode()로 호출하면 다른 주소 값을 나타냄
2번 방법) 무조건 원본 배열의 0번 인덱스부터 복사 진행 됨(내가 제시한 갯수만큼) 그리고 내가 제시한 갯수만큼이 곧 복사본 배열의 크기로 지정됨
//Arrays 클래스에서 제공하는 copyOf메소드 이용한 복사
int[] origin = {1,2,3,4,5};
//복사본 배열 = Arrays.copyOf(원본 배열명, 복사한 갯수);
int[] copy = Arrays.copyOf(origin,5);
//for 문 돌려서 copy를 출력하면
// 1 2 3 4 5
//이렇게 나오지만
//.hashCode()로 출력해보면
//orgin과 copy 둘 다 다른 주소 값이 나온다.
3번 방법) clone()메서드를 활용하는 법
int[] origin = {1, 2, 3, 4, 5};
//복사본 배열 = 원본 배열.clone();
int[] copy = origin.clone(); // 인덱스는 물론 복사할 개수 지정 x
728x90
반응형
'Language > Java' 카테고리의 다른 글
클래스 다이어그램 (0) | 2021.02.05 |
---|---|
접근 제한자 4가지 (0) | 2021.02.04 |
Arrays.toString()메소드 (0) | 2021.02.01 |
자바 배열 선언 및 할당과 동시에(초기화) 한 번에 끝내기 (0) | 2021.01.29 |
Stack과 Heap (0) | 2021.01.28 |