배열 복사
배열 복사에는 얕은 복사, 깊은 복사 두 가지가 있다.
얕은 복사
주소값이 복사된 배열이기 때문에, 원본 배열이 변경되면 복사된 배열 또한 변경된다.
package may31;
import java.util.Arrays;
public class ArrayCopy01 {
public static void main(String[] args) {
int[] arr01 = {10, 20, 30};
int[] arr02 = new int[3];
arr02 = arr01; //arr01만 수정해도, arr02의 값도 수정된다.
//arr01의 0번째 원소의 값 바꾸기
arr01[0] = 100;
System.out.println(Arrays.toString(arr01)); //[100, 20, 30]
System.out.println(Arrays.toString(arr02)); //[100, 20, 30] arr01만 수정했는데, arr02의 값도 수정되었다.
}
}
깊은 복사
원본 배열이 변경되어도 복사본 배열은 변경되지 않는다.
깊은 복사를 실행하는 방법은 다음과 같이 여러 방법이 존재한다.
- for문을 활용하여 직접 대입
- System.arraycopy(src, srcPos, dest, destPos, length) 이용
- 원본배열이름.clone() 이용
1) for문을 활용하여 직접 대입하는 방법
package may31;
import java.util.Arrays;
public class ArrayCopy01 {
public static void main(String[] args) {
int[] arr01 = {10, 20, 30};
int[] arr02 = new int[3];
for (int i = 0; i < arr02.length; i++) {
arr02[i] = arr01[i];
}
arr01[0] = 1000;
System.out.println(Arrays.toString(arr01)); //[1000, 20, 30]
System.out.println(Arrays.toString(arr02)); //[10, 20, 30] 변경 사항 반영x
}
}
2) System.arraycopy(src, srcPos, dest, destPos, length) 이용하는 방법
package may31;
import java.util.Arrays;
public class ArrayCopy01 {
public static void main(String[] args) {
int[] arr01 = {10, 20, 30};
int[] arr02 = new int[3];
System.arraycopy(arr01, 0, arr02, 0, 0);
/* src 원본
* srcPos 원본 시작위치 설정
* dest 값을 담을 배열
* destPos 배열 위치 설정
* length 담을 길이 설정
*/
int[] arr03 = new int[10];
System.arraycopy(arr01, 0, arr03, 1, arr01.length);
System.out.println(Arrays.toString(arr03));//[0,10,20,30,0,0,0,0,0,0]
arr01[0] = 100;
System.out.println(Arrays.toString(arr03));//[0,10,20,30,0,0,0,0,0,0] 변경 사항 반영x
}
}
3) 원본배열이름.clone() 이용하기
package may31;
import java.util.Arrays;
public class ArrayCopy01 {
public static void main(String[] args) {
int[] arr01 = {10, 20, 30};
int[] arr04 = arr01.clone();
arr01[0] = 90;
System.out.println(Arrays.toString(arr01)); //[90, 20, 30]
System.out.println(Arrays.toString(arr04)); //[10, 20, 30] 변경 사항 반영 x
}
}
'BackEnd > Java' 카테고리의 다른 글
[Java] 생성자 Constructor (0) | 2021.07.09 |
---|---|
[Java] 텍스트 형식 Text Format (0) | 2021.07.08 |
[Java] Object (0) | 2021.07.01 |
[Java] 접근제어자 Access Modifier (0) | 2021.07.01 |
[Java] 스태틱 Static (0) | 2021.07.01 |
댓글