Test098 배열 / 배열의 복사 (Test097 파일과 비교) / 데이터 복사
※ 배열 변수의 복사는 데이터 복사, 주소 값 복사 두 가지 형태가 존재한다.
주소값 복사 → 얕은 복사 →원본을 수정하면 복사본에 영향을 미치게 되는 복사 방법.
(모든 참조형 데이터에 해당하는 복사)
데이터 복사 → 깊은 복사 → 실제 요소로 들어있는 값에 대한 복사로 원본을 수정해도 복사본에 영향을 미치지 않는 복사 방법
※ 데이터 복사
int 형 배열에 대한 깊은 의미의 복사를 처리하는
메소드를 구현하는 형태로 실습을 진행한다.
Test098.java
public class Test098
{
public static void main(String[] args)
{
int[] nums = {10, 20, 30, 40, 50}; //-- 배열 원본
int[] copy1 = nums; //-- 얕은 의미의 배열 복사 수행 (주소값 복사)
int[] copy2 = copyArray(nums); //-- 깊은 의미의 배열 복사 수행 (데이터 복사)
int[] copy3 = (int[])nums.clone(); //-- 깊은 의미의 배열 복사 수행 (자바 제공 → 배열.clone() 메소드)
//int[] copy3 = nums.clone();
//-- 오른쪽이 커서 자동 형변환에 위배
//nums.clone();
//-- 배열을 복사하게 해주는 clone()메소드. 객체(object)타입으로 반환하게끔 되어있다. 대상 데이터 타입이 객체라고 본다.
//배열.length;
//-- 속성을 빌려쓰는 것
// 원본 배열 요소의 수정 발생~!!!
nums[1] = 2;
// 결과 확인
System.out.println(copy1[1]); //--==>> 2
System.out.println(copy2[1]); //--==>> 20
System.out.println(copy3[1]); //--==>> 20
}
public static int[] copyArray(int[] os)
{
// 매개변수로 넘겨받은 배열.
// 즉, 원본 배열 만큼의 배열방(메모리 공간)을 확보한 복사할 배열방을 생성하겠다는 뜻.
int[] temp = new int[os.length];
// 각각의 원본 배열(os)에 담겨있는 요소들을 복사 배열(temp)에 담아내기
for (int i=0; i<os.length; i++)
temp[i] = os[i];
// 복사한 배열(temp) 반환
return temp;
}
}
cmd
2
20
20
계속하려면 아무 키나 누르십시오 . . .
댓글