2013년 10월 23일 수요일

[자바객체복사배열복사]자바배열(Java Array),배열복사/복제

[자바객체복사배열복사]자바배열(Java Array),배열복사/복제, System.arrayCopy, clone,배열복제,객체복제

 객체는 값의 할당을 원칙으로 함.
배열은 객체임. 일반적인 방법으로 복사되지 않음.
 
 
배열 복사의 두 가지 방법
 
- System.arrayCopy()메서드 이용
 
 
 
public static void arraycopy(Object src , int src_position ,
                  Object dst ,int dst_position ,int length)
Object src : 원본배열
int src_position : 원본배열의 시작위치

Object dst : 복사할 배열
int dst_position : 복사할 배열의 시작위치
int length : 복사할 개수.

- Object클래스의 clone()메서드 이용

메모리를 복사하여 Object형 객체 리턴
원래 타입으로 다운캐스팅 필요
[Clone()메서드로 객체복사 시 주의점]
Cloneable인터페이스 구현필요
배열은 이미 구현되어 쓸 구현 필요 없음
 
int[] mytarget = (int[])mydream.clone();
 
[예1]

public class ArrayTest {
   public static void main(String[] args) {
  
   int[] onjoraclejava  = new int[]{5, 4, 6, 9, 7, 9};   
      int[] target = {10, 20, 30, 40, 50, 60,70, 80};
     
      System.arraycopy(onjoraclejava, 2, target, 3, 4);
     
      for(int i=0; i<target.length; i++)
      {
         System.out.println("target["+i+"] : " + target[i]);
      }
   }
}

[결과]
 
target[0] : 10
target[1] : 20
target[2] : 30
target[3] : 6
target[4] : 9
target[5] : 7
target[6] : 9
target[7] : 80
 
[예2]
 
public class CloneTest {
   public static void main(String[] args) {
      int[] oraclejavanew  = new int[]{1, 4, 6, 9};
      int[] target = (int[])oraclejavanew.clone(); 
      for(int i=0; i<target.length; i++)
      {
         System.out.println("target["+i+"] : " + target[i]);
      }
   }
}
 
[결과]
 

target[0] : 1
target[1] : 4
target[2] : 6
target[3] : 9

댓글 없음:

댓글 쓰기