배열의 주소 복사
(= a와 b가 참조하는 위치가 같다.)
a의 메모리 할당 : a배열의 주소가 저장
int []a = {10,20,30}; --> a 메모리 할당 ex) a: 0x100
int []b; --> b 메모리 할당 받지 않음 ex) b: 쓰레기값
b=a; --> a배열 주소값을 b에 복사 ex) b: 0x100
b[1] =200; --> a:200, b:200
배열의 값 복사
int []a= new int[]{10,20,30}; --> a 메모리 할당 ex) a : 0x100
int []b = new int[a.length]; --> b 메모리 할당 ex) b : 0x200
//a배열의 값을 b배열에 복사
for(int i = 0; i<a.length; i++)
b[i]=a[i];
System.arraycopy 메소드 이용한 복사 (1차원배열)
- 1차원 배열 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package ex0731;
public class Array_CopyMethod {
public static void main(String[] args) {
int []a= new int[]{10,20,30}; //배열에서 초기값 생략은 초기값을 설정할 때!
int []b = new int[a.length];
//a배열의 값을 b배열에 값 복사
System.arraycopy(a, 0, b, 0, a.length); //원본,복사하고싶은 시작위치,복사대상,복사대상에 어디서부터 넣을지,몇개복사할건지
System.out.print("a 배열: ");
for(int n :a) {
System.out.print(n+" ");
}
System.out.println();
System.out.print("b 배열: ");
for(int n : b) {
System.out.print(n+" ");
}
System.out.println();
}
}
|
cs |
System.arraycopy 메소드 이용한 복사 (2차원배열)
* 2차원 arraycopy 주의 할 점 " 9번 line "
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package ex0731;
public class Array2d_Copy_Ex1 {
public static void main(String[] args) {
int [][]a = {{10,20,30},{40,50,60}};
int [][]b = new int[a.length][a[0].length];
System.arraycopy(a, 0, b, 0, a.length);
//2차원배열에서 arraycopy를 하면 주소(2개)가 복사됨.
//출력
System.out.print("a 배열: ");
for(int i = 0; i<a.length; i++) {
for(int j = 0; j<a[i].length; j++)
System.out.print(a[i][j]+" ");
}
System.out.println();
System.out.print("b 배열: ");
for(int i = 0; i<b.length; i++) {
for(int j = 0; j<b[i].length; j++)
System.out.print(b[i][j]+" ");
}
System.out.println();
b[1][1] = 200;
System.out.println(a[1][1]+","+b[1][1]); //200,200
//2차원 배열은 복사시 얇은 복사가 된다.
}
}
|
cs |
arraycopy로 이차원배열의 값만 복사하고 싶을 때,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package ex0731;
public class Array2d_Copy_Ex2 {
public static void main(String[] args) {
int [][]a = {{10,20,30},{40,50,60}};
int [][]b = new int[a.length][a[0].length];
//이차원 배열 값만 복사하고 싶을 때
for(int i = 0; i<a.length; i++){
System.arraycopy(a[i], 0, b[i],0, a[i].length);
}
//출력
System.out.print("a 배열: ");
for(int i = 0; i<a.length; i++) {
for(int j = 0; j<a[i].length; j++)
System.out.print(a[i][j]+" ");
}
System.out.println();
System.out.print("b 배열: ");
for(int i = 0; i<b.length; i++) {
for(int j = 0; j<b[i].length; j++)
System.out.print(b[i][j]+" ");
}
System.out.println();
b[1][1] = 200;
System.out.println(a[1][1]+","+b[1][1]); // 50,200
//2차원 배열은 복사시 얇은 복사가 된다.
}
}
|
cs |
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향 (0) | 2020.07.31 |
---|---|
[JAVA] 명령 행 인수 (0) | 2020.07.31 |
[JAVA] TwoDimensionArray(2차원배열) (0) | 2020.07.30 |
[JAVA] Sort(정렬) (0) | 2020.07.30 |
[JAVA] OneDimensionArray(1차원배열) (0) | 2020.07.29 |