상세 컨텐츠

본문 제목

자바 배열복사 , arraycopy , 주소값이 같은 sallowcopy , 주소값이다른 deepcopy

관리X 과거글

by 까먹기전에 2014. 12. 29. 12:11

본문

반응형



배열복사는 말그대로 배열의 특정값을 다른 배열의 특정자리에 붙여넣기 하는것입니다.


syntax) System.arraycopy(a, 0, b, 0, a.length);


ex)


class A{


public static void main(String args[]){

int[] a = {100,200,300,400};

int[] b = {10,20,30,40};

System.arraycopy(a, 1, b, 2, 1);

                                                    -> a의 1번째부터 1개만큼의 값을

                                                    b의 2번째에 집어넣음

for(int c : b)

System.out.println(c);


}

}



deepcopy 깊은복사 -> arraycopy를 이용해 주소가 다른 배열을 복사


class A{


static int[] deepcopy(int[] a){

int[] b= new int[a.length];

System.arraycopy(a, 0, b, 0, a.length);// a의 0번째부터 값을 b에 0번쨰부터 a의 길이만큼 복사함

return b;

}

public static void main(String args[]){


int[] a={100,200,300,400,500};

int[] b=deepcopy(a); 


for(int c:b){

System.out.println(c+",");

}

System.out.println(a);

System.out.println(b);

}

}

출력 

100,

200,

300,

400,

500,

                                                [I@15db9742     -> 배열의 주소값이 완전달라짐

[I@6d06d69c



shallowcopy 얕은복사 -> 같은 배열을 리턴(주소가 같음)


class A{


static int[] sallowcopy(int[] a){

return a;

}

public static void main(String args[]){


int[] a={100,200,300,400,500};

int[] b=sallowcopy(a);


for(int c:b){

System.out.println(c+",");

}

System.out.println(a);

System.out.println(b);

}

}


출력

100,

200,

300,

400,

500,

                         [I@15db9742 --> 주소값이 같음

[I@15db9742

관련글 더보기