자바 메모리 참조에 대한 질문 올리겠습니다.
미쁘다
자바 책 보다가 궁금한 점이 있어서 올립니다.
책에 보니 객체가 메쏘드에 전달될때 실제로는 그 객체에 대한 참조가 전달된다. 즉 주소값이 전달된다 라고 되어 있습니다.
그러면서 예제가 나와 있는데 클래스는 3개 입니다. 우선 다 올리겠습니다.public class ch
{
public void ch_value(num n1, num n2)
{
n1.set_value(293);
n2 = new num(838);
System.out.println(n1+ +n2);
}
}
public class in
{
public static void main(String args[])
{
ch c = new ch();
int i;
num a = new num(10);
num b = new num(20);
System.out.println(a+ +b);
c.ch_value(a,b);
System.out.println(a+ +b);
}}
public class num
{
public int value;
public num(int update)
{
value = update;
}
public void set_value(int num)
{
value = num;
}
public String toString()
{
return value + ;
}
}이렇게 3개의 클래스가 있습니다. 궁금 한것은
public class ch
{
public void ch_value(num n1, num n2)
{
n1.set_value(293);
n2 = new num(838);보다시피 n1,n2둘다 객체를 넘기고 있습니다.
그럼 다른 클래스에서도 참조할때 n1의 값은 293이고 n2의 값 또한 838이 되어야 하는 것이 아닙니까?
제 생각에는 둘다 일반 값이 아닌 주소 값을 넘겼기 때문이라고 생각합니다. (c언어 포인터에서 그렇게 배워서;;)
실력이 많으신 분에게는 제 질문이 답답하게 보이겠지만 좀 봐주시고 답변 좀 부탁드리겠습니다..ㅠ.ㅠ
-
천칭자리
감사합니다^^
-
상1큼한렩
자바에서는 무조건 call by value입니다. 레퍼런스를 포인터라고 생각하시면 편할 것입니다. 그래서 b 와 n2는 가르키는 곳이 같았을 뿐이었는데 new num(838)을 하면서 메모리를 새로 할당했기 때문에 n2의 가르키는 곳이 달라져서 b에는 영향을 줄 수 없는 것입니다.