Given: ``` class Box { int size; Box(int s) { size = s; } } public class Laser { public static void main(String[] args) { Box b1 = new Box(5); Box[] ba = go(b1, new Box(6)); ba[0] = b1; for(Box b : ba) System.out.print(b.size + " "); } static Box[] go(Box b1, Box b2) { b1.size = 4; Box[] ma = {b2, b1}; return ma; } } ``` What is the result? A) 6 4 B) 5 5 C) 5 4 **D) 4 4** 선생님, 안녕하세요. Box b1 = new Box(5); b1이라는 참조변수로, Box라는 객체를 생성하고 변수는 5를 가진다..까지는 이해했는데 Box[] ba = go(b1, new Box(6)); Array 배열의 go(b1, new Box(6))을 어떻게 대입해서 결과값을 만들어내는지를 이해하지 못하였습니다. 말씀 부탁드립니다.
# 파라미터와 레퍼런스 변수 이 문제는 파라미터의 전달과정을 이해하고 있는가에 대한 문제입니다. ``` public class Laser { public static void main(String[] args) { Box b1 = new Box(5); Box[] ba = go(b1, new Box(6)); ba[0] = b1; for(Box b : ba) System.out.print(b.size + " "); } static Box[] go(Box b1, Box b2) { b1.size = 4; Box[] ma = {b2, b1}; return ma; } } ``` 해당 프로그램은 main 메소드 첫 행으로부터 시작됩니다. 먼저 Box 객체 b1을 만듭니다. ``` Box b1 = new Box(5); ``` ![Imgur](https://i.imgur.com/OuxIMQU.png) b1객체와 새롭게 만든 Box객체를 입력값으로 전달하여 go(Box, Box) 메소드를 호출합니다. ``` // 메소드 호출 Box[] ba = go(b1, new Box(6)); ``` 전달된 입력값은 go() 메소드의 파라미터가 각각 전달 받습니다. ``` static Box[] go(Box b1, Box b2) { .... } ``` ![Imgur](https://i.imgur.com/4mpG91m.png) 다음으로 파라미터 b1의 값을 4로 바꾸고, 배열 m2를 생성하여 반환합니다. ``` static Box[] go(Box b1, Box b2) { b1.size = 4; Box[] ma = {b2, b1}; return ma; } ``` ![Imgur](https://i.imgur.com/qFHGf0J.png) 반환된 배열은 main 메소드의 ba 변수가 가리킵니다. ![Imgur](https://i.imgur.com/UHKlSLC.png) 실행흐름은 다시 main 메소드로 돌아와서 ba[0]에 b1의 값을 대입하고, ba 배열을 차례대로 출력합니다. ``` ba[0] = b1; for(Box b : ba) System.out.print(b.size + " "); ``` ![Imgur](https://i.imgur.com/tPgzEiM.png)