문제
다음 Java 코드의 출력 결과는?
Javapublic class Main { public static void change(String[] data, String s){ data[0] = s; s = "Z"; } public static void main(String[] args) { String data[] = { "A" }; String s = "B"; change(data, s); System.out.print(data[0] + s); } }
① AB ② BB ③ BZ ④ ZZ
정답
2번
해설
정답: 2. 배열 객체의 0번 원소는 "B"로 바뀌지만, 매개변수 s에 "Z"를 대입해도 main의 s는 바뀌지 않는다.
오답 풀이
- 1번: data[0]이 "B"로 변경된 점을 반영하지 않았다.
- 2번: data[0]은 B, main의 s도 B이므로 정답이다.
- 3번: 지역 매개변수 s의 변경이 main의 s에 반영된다고 잘못 본 결과이다.
- 4번: 배열 원소와 main의 s가 모두 Z로 바뀌지 않는다.
보충 개념 Java는 값에 의한 호출을 사용한다. 참조값이 복사되어 전달되므로 같은 객체의 내부 상태는 바꿀 수 있지만, 매개변수 자체를 새 값으로 바꿔도 호출자 변수는 바뀌지 않는다.