얕은복사
= 객체의 주소값만 가져와서 참조형 변수에 저장하고 하나의 객체를 두 변수가 참조하고 있는 것
= 하나의 배열을 공유하는 형태
배열은 참조형이기 때문에
int arr1 = arr2; 대입시키면
arr1과 arr2는 hip메모리의 같은 주소값을 공유한다.
1개의 주소를 같이 쓰고 있음!!!!
때문에 둘 중 어느 값을 바꾸어도 같이 바뀐다.
깊은복사
= 다른 객체를 생성하여 새로운 객체에 데이터 내용을 복사하는 것
= 새로운 배열을 만들어서 내부의 데이터만 복사함.
[깊은복사 방법 3가지]
: for문을 통한 1:1 값 대입
= 길이가 같은 배열을 새로 만들어서 for문으로 값을 복사
서로 주소값은 다르기 때문에 대입한 배열에만 값이 바뀜!
: System.arraycopy() 메소드 이용하는 방법
1.원본데이터가 저장된 배열
2.원본 배열 중 복사하고싶은 데이터의 인덱스번호(시작)
3.새로운 배열(복사한 데이터가 들어갈 배열)
4.새로운 배열중 데이터가 들어갈 시작 인덱스번호
5.원본배열에서 데이터를 복사할 길이
3.세번째 방법
: Clone() 메소드를 이용하는 방법
= 완전히 배열을 깊은복사 할 때
int[] arr3 = arr1.clone();