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))을 어떻게 대입해서 결과값을 만들어내는지를 이해하지 못하였습니다.
말씀 부탁드립니다.
sehongpark님의 답변
# 파라미터와 레퍼런스 변수
이 문제는 파라미터의 전달과정을 이해하고 있는가에 대한 문제입니다.
```
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)