자바는 pass-by-reference, pass-by-value 둘 중 무엇인가요?
조회수 3376회
저는 항상 Java가 pass-by-reference라고 생각해왔습니다. 근데 그것이 아니라고 주장하는 블로그를 봤습니다.(여기요 링크 : http://javadude.com/articles/passbyvalue.htm) 저는 차이점이 뭔지 모르겠어요. 설명 좀 해주세요.
1 답변
-
자바는 pass-by-value입니다. 아쉽게도 초보자들은 포인터 참조방식을 호출하기에 혼란을 겪습니다. 다음 reference 들은 값으로 전달됩니다. 다음과 같이 진행됩니다:
public static void main( String[] args ){ Dog aDog = new Dog("Max"); foo(aDog); if (aDog.getName().equals("Max")) { //true System.out.println( "Java passes by value." ); } else if (aDog.getName().equals("Fifi")) { System.out.println( "Java passes by reference." ); } } public static void foo(Dog d) { d.getName().equals("Max"); // true d = new Dog("Fifi"); d.getName().equals("Fifi"); // true }
예시에서 aDog.getName()은 "Max"를 return할 것입니다. main메소드 내 aDog의 값은 foo함수내에서 Dog "Fifi"로 덮어쓰여지지 않습니다. object reference는 값으로서 전달되기 때문이죠. 만약 reference로 전달된다면 main메소드 내 aDog.getName()은 foo함수 호출 후에 "Fifi"를 return할 것입니다. 아래 예시와 같이 말이죠.
Dog aDog = new Dog("Max"); foo(aDog); aDog.getName().equals("Fifi"); // true public void foo(Dog d) { d.getName().equals("Max"); // true d.setName("Fifi"); }
댓글 입력