자바는 pass-by-reference, pass-by-value 둘 중 무엇인가요?


저는 항상 Java가 pass-by-reference라고 생각해왔습니다. 근데 그것이 아니라고 주장하는 블로그를 봤습니다.(여기요 링크 : http://javadude.com/articles/passbyvalue.htm) 저는 차이점이 뭔지 모르겠어요. 설명 좀 해주세요.

  • 2016년 05월 17일에 작성됨

조회수 113


1 답변


좋아요
0
싫어요
채택취소하기

자바는 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");
}
  • 2016년 05월 18일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close