문제
다음 Java 코드의 출력 결과는?
① 1a3b3 ② 3a2b1 ③ 1a2b3 ④ 3a3b1
정답
1번
해설
정답: 1. arr[0]과 arr[2]의 참조가 교환되어 arr[0]은 c를 가리킨다. 이후 arr[1].v, 즉 b.v에 arr[0].v인 3이 대입된다. a.v=1, b.v=3, c.v=3이므로 1a3b3이 출력된다.
오답 풀이
- 1번: 참조 교환과 객체 필드 변경을 올바르게 반영했다.
- 2번: a와 c 객체 자체의 값이 바뀐 것으로 오해한 결과이다.
- 3번: b.v 변경을 누락한 값이다.
- 4번: a.v와 c.v를 잘못 계산했다.
보충 개념 Java 배열에 객체를 저장하면 객체 자체가 아니라 참조가 저장된다. 배열 원소 교환은 참조 교환이며, 참조를 통해 필드를 변경하면 실제 객체 값이 바뀐다.