얕은 복사(Shallow Copy) b[]는 a[]배열 자체를 할당 했기 때문에 a[]와 b[]의 각 주소값이 같은 값(element)를 바라보고 있다. 둘 중 하나 엘리먼트를 1개만 변경해도 다른 하나도 함께 변경 된다.
public static void main(String[] args) {
int[] a = {1, 2, 3, 4};
int[] b = a; // 얕은 복사(Shallow Copy)
System.out.println(b[0]);
b[0] = 4;
System.out.println(b[0]);
System.out.println(a[0]);
깊은 복사(Deep Copy) 위 처럼 얕은 복사를 의도하지 않은 것이며 객체 자체를 클론하는 것이 목적이라면 Arrays 클래스의 메서드인 copyOf 메서드를 활용하여 복사해야 한다. a[]를 통해 새로운 배열 객체 b[]를 생성해야 한다. 각각 주소값이 각자의 값을 바라보고 있기 때문에 둘 중 한 배열의 element를 변경 하더라도 다른 배열에 영향을 주지 않는다.
int[] a = {1, 2, 3, 4};
int[] b = Arrays.copyOf(a, a.length); // 깊은 복사(Deep Copy)
System.out.println(b[0]);
b[0] = 4;
System.out.println(b[0]);
System.out.println(a[0]);