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

저는 항상 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");
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.