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

조회수 3375회

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

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");
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)