강의로 돌아가기
-

참조형 변수는 왜 다르게 출력이 되죠?

참조형 변수로 선언된 arr이

호출한 함수도 void 이니 리턴값이 없는데
왜 결과를 출력하면 11이 나오죠?

2 개의 답변
정두식_

main메소드 입장에서 생각하면요. add에 매개변수로 전달하는 숫자가 10이라고 했을때,

  • int value로 전달할때는 그냥 10이라고 새로운 종이에 적어서 전달하는겁니다. 그 종이를 돌려주지 않으면 가져간 다음에 뭘하건 나랑은 상관이 없습니다.
  • int[]arr로 전달할때는 저기 1958번 강의실에 화이트보드에 값을 써 놨어라고 값이 적힌 주소를 전달합니다. 거기에 가 보면 10이라는 값이 써져 있는거져. add메소드는 값을 변경할때 그 강의실에 가서 그걸 지우고 다시 11을 적어버립니다. 나중에 main이 그 값을 사용할때도 강의실에 가서 값을 보고 확인해야 사용합니다. 그러면 11이 적혀 있겠져.
  • -
    아~ 네 감사합니다!! 이해가 되었습니다!! :)
    -―2017.08.18 11:24
  • -
    설명을 한방에 이해되게 설명해주시네요~!
    -―2017.08.18 11:24
  • -
    와 예시 장난아니게 좋네요 굿 :)
    -―2017.08.18 11:24
  • -
    왜 학교 교수님들은 이렇게 설명 안해주실까요 ㅠㅠ 감사합니다.
    -―2017.08.18 11:24
  • 이영규
    감사합니다
    이영규―2018.04.10 10:11
  • 정이든
    사랑합니다
    정이든―2018.07.02 15:05
  • -
    이해 정말 잘되는 설명 감사합니다.
    -―2018.07.05 20:24
-

저도 질문있습니다.
int가 아닌 Interger는 참조형 Type으로 바꿨습니다. 아래 value2는 11이어야 하지 않나요? 근데 10으로 출력되네요.
혹시 아시는 분 있나요?

Integer value2 = new Integer(10);
exam.addOne(value2);
System.out.println(참조형 변수의 값을 다른 메소드에서 변경한 결과2:+value2);

  • 정두식_
    Integer는 생성할 때 한 번 값이 정해지면 그 값을 변경할 수 없어서 그렇습니다.
    정두식_―2018.02.08 10:02
  • 정두식_
    자바 공부를 하면서 문서를 보는 습관을 들이면 좋은데요. 여기 있는 Integer의 정의를 한 번 보시면 constructor에서 값을 설정하는 방법만 있고, 값을 변경할 수 있는 method가 없습니다.
    정두식_―2018.02.08 10:03
  • 정두식_
    https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
    정두식_―2018.02.08 10:03
  • -
    답변 감사드립니다!
    -―2018.02.08 10:46
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.