배열의 복사
[얕은 복사] 주소값 복사
- B = A;
class Main {
public static void main(String[] args) {
int a[] = {1, 8, 3};
int b[] = a;
b[0] = 10;
// 결과 확인
System.out.print("a Array : ");
for (int v:a)
System.out.print(v + " ");
System.out.print("\nb Array : ");
for (int v:b)
System.out.print(v + " ");
}
}
[결과]
a Array : 10 8 3
b Array : 10 8 3
[깊은 복사] 복제. 새로운 메모리 공간에 값 복사
2. B = A.clone();
- clone();
- Object 클래스의 clone() 메소드는 자신을 복제하여 새로운 인스턴스를 생성하는 일
- 단순히 인스턴스 변수의 값만 복사하기 때문에 참조 타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않는다.
package 자바의_정석.ch05; public class ArrayEx4 { public static void main(String[] args) { char[] abc = {'A', 'B', 'C', 'D'}; char[] num = {'0','1', '2', '3', '4', '5', '6', '7', '8', '9'}; System.out.println(abc); System.out.println(num); // 배열 abc 와 num 을 붙여서 하나의 배열 (result) 로 만든다. char[] result = new char[abc.length + num.length]; System.arraycopy(abc , 0, result, 0 , abc.length); System.arraycopy(num, 0, result, abc.length, num.length); System.out.println(result); //배열 abc를 배열 num 의 첫 번째 위치부터 배열 abc 의 길이만큼 복사 System.arraycopy(abc, 0, num, 0 , abc.length); System.out.println(num); // number 의 인덱스 6 위치에 3개를 복사 System.arraycopy(abc, 0, num, 6, 3); System.out.println(num); } }
[결과]
a Array : 1 8 3
b Array : 10 8 3
3. System.arraycopy(A, sourcePos, B, destPos, len);
- Object A : 복사할 대상
- int sourcePos : 복사할 배열(A)의 시작 index
- Object B : 복사될 곳
- int destPos : 복사될 곳(B)의 시작 index
- int len : 복사할 길이(원소 개수)
package 자바의_정석.ch05;
public class ArrayEx4 {
public static void main(String[] args) {
char[] abc = {'A', 'B', 'C', 'D'};
char[] num = {'0','1', '2', '3', '4', '5', '6', '7', '8', '9'};
System.out.println(abc);
System.out.println(num);
// 배열 abc 와 num 을 붙여서 하나의 배열 (result) 로 만든다.
char[] result = new char[abc.length + num.length];
System.arraycopy(abc , 0, result, 0 , abc.length);
System.arraycopy(num, 0, result, abc.length, num.length);
System.out.println(result);
//배열 abc를 배열 num 의 첫 번째 위치부터 배열 abc 의 길이만큼 복사
System.arraycopy(abc, 0, num, 0 , abc.length);
System.out.println(num);
// number 의 인덱스 6 위치에 3개를 복사
System.arraycopy(abc, 0, num, 6, 3);
System.out.println(num);
}
}
[결과]
ABCD
0123456789
ABCD0123456789
ABCD456789
ABCD45ABC9
💡 String 클래스는 char 배열에 기능(메서드)을 추가한 것이다.
'TIL' 카테고리의 다른 글
TIL - 230815 (0) | 2023.08.15 |
---|---|
TIL - 230810 (1) | 2023.08.11 |
TIL -230808 (0) | 2023.08.11 |
TIL - 230807 (0) | 2023.08.11 |
TIL - 230803 (0) | 2023.08.11 |