List.copyOf()로 복사한 후, 원본을 수정하면 복사본이 바뀔까?

7790 단어 JavaJava

List.copyOf()로 복사한 후, 원본을 수정하면 복사본이 바뀔까?
-> 바뀔 수도 있고, 바뀌지 않을 수도 있다.

바뀌는 경우

원본에서 참조하는 객체의 값이 바뀌면 복사본도 바뀐다.
원본, 복사본 모두 같은 참조를 가리키고 있기 때문이다.

예시)

public static void main(String[] args) {
    List<Hello> original = new ArrayList<>();
    original.add(new Hello("hi"));
    original.add(new Hello("hi2"));List<Hello> newONE = List.copyOf(original);
    original.get(0).setSth("bye");System.out.println("original: " + original);
    System.out.println("new: " + newONE);
}

그림으로 표현하면 다음과 같을 것이다.

원본에 add, delete, set등의 리스트 단위의 조작을 할 때는, 복사본은 영향받지 않는다.

예시)

public static void main(String[] args) {
    List<Hello> original = new ArrayList<>();
    original.add(new Hello("hi"));
    original.add(new Hello("hi2"));List<Hello> newONE = List.copyOf(original);
    original.add(new Hello("bye"));System.out.println("original: " + original);
    System.out.println("new: " + newONE);
}

좋은 웹페이지 즐겨찾기