Language/Java
Arrays.fill()에 참조타입을 매개변수로 전달하면?
brother_stone
2023. 11. 25. 19:38
프로그래머스 문제를 풀다 StringBuilder배열을 만들고 반복문을 돌며 특정 요소에 append하는 로직을 만들었다.
append하기 위해선 각 요소에 StringBuilder객체를 초기화해야했고 Arrays.fill() 메서드를 사용해 초기화했다.
Arrays.fill(temp, new StringBuilder());
그런데 이후 특정요소에 append()하면 모든 요소의 StringBuilder에 append되는 것을 확인했다. 무엇이 원인일까 생각해보았고 Arrays.fill() 메서드에 객체를 매개변수로 전달하면 각 요소는 해당 객체를 얕은 복사하기 때문일 것으로 생각했다.

문서를 자세히 보면 특정된 객체의 참조를 각 요소에 할당한다고 되어있다..^^

ChatGPT에 물어봐도 같은 답변을 준다.
결론은 Arrays.fill()에 참조 타입을 매개변수로 넘기면 각 요소는 깊은 복사가 아닌 매개변수로 전달된 객체의 참조를 다같이 얕은 복사해서 가져가게 된다는 것이다. 사용에 유의하자.