java/배열

얕은복사와 깊은복사

june__Park 2021. 3. 23. 10:36
package week2;

public class Day11_4 {

	public static void main(String[] args) {
		/*
		 * int num = 10; // new int[5] // 0 1 2 3 4 int arr[] = { 10, 20, 30, 40, 50 };
		 * // 얕은 복사 : 같은 주소값을 가진다 int arr2[] = arr; arr2[3] = 100;
		 * System.out.println("arr[3] = " + arr[3]); // 100
		 * System.out.println("arr2[3] =" + arr2[3]); // 100 System.out.println("arr = "
		 * + arr); // [I@15db9742 System.out.println("arr2 =" + arr2); // // 깊은 복사 : 다른
		 * 주소값을 가진다
		 */

		int num = 10; // new int[5]
		// 0 1 2 3 4
		int arr[] = { 10, 20, 30, 40, 50 };
		// 얕은 복사  : 같은 주소값을 가진다 
		int arr2[] = arr;
		arr2[1] = 500;
		System.out.println("==== 얕은 복사 =====");
		System.out.println("arr[1] = " + arr[1]); // 100
		System.out.println("arr2[1] =" + arr2[1]); // 100
		System.out.println("arr = " + arr); // [I@15db9742
		System.out.println("arr2 =" + arr2); //
		// 깊은 복사 : 다른 주소값을 가진다 
		// 다른 주소를 가진다 --> 새로운 메모리방을 만들어준다 
		// new int[5];
		int temp[] = new int[arr.length]; // 0 0 0 0 0
		for (int i = 0; i < arr.length; i++) {
			temp[i] = arr[i];
		}
		System.out.println("==== 깊은 복사 =====");
		arr2 = temp;
		temp = null; // 주소 초기값
		arr2[3] = 100;
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr2[i] + " ");
		}
		System.out.println();
		System.out.println("arr[3] = " + arr[3]); // 30
		System.out.println("arr2[3] =" + arr2[3]); // 100
		System.out.println("arr = " + arr);
		System.out.println("arr2 =" + arr2);

	}

}