위의 소스를 실행시켰을 때 출력은 value1이 나올까, value2가 나올까. 그리고 왜 그렇게 나올까.
call by value / call by reference랑 상관있음
댓글 12
노무노무어렵네요
sh(142.241)2014-11-15 00:53
value1
Sth(thunder11)2014-11-15 00:54
Sth// 이유는?
고양아(lastiii)2014-11-15 00:55
test 메소드에서 인자로 받는 map은 메인 메소드의 map이 가리키는 객체를 복사해서 전달 받는거 아님? 따라서 test 메소드내에서 map은 같은 애를 가리키긴 하는데 메소드 끝나면 로컬변수는 다 날아가잖아요? 만약에 메소드 내에서 프린트했으면 value2가 찍혔을 듯.
Sth(thunder11)2014-11-15 00:58
내가 써놓고도 뭐라하는지 모르겠다 value2 찍고 싶으면 void가 아니라 map형으로 해서 리턴 map 하면 value2 찍힐 듯
Sth(thunder11)2014-11-15 00:59
메소드 내로 인자가 전달될 때 객체 복사는 일어나지 않음.
고양아(lastiii)2014-11-15 01:00
만약에 객체가 복사되는 거라면 test 메소드에서 map=new HashMap();을 삭제한다고 했을때에도 value1이 찍혀야 하나 실제로는 value2가 찍힘
노무노무어렵네요
value1
Sth// 이유는?
test 메소드에서 인자로 받는 map은 메인 메소드의 map이 가리키는 객체를 복사해서 전달 받는거 아님? 따라서 test 메소드내에서 map은 같은 애를 가리키긴 하는데 메소드 끝나면 로컬변수는 다 날아가잖아요? 만약에 메소드 내에서 프린트했으면 value2가 찍혔을 듯.
내가 써놓고도 뭐라하는지 모르겠다 value2 찍고 싶으면 void가 아니라 map형으로 해서 리턴 map 하면 value2 찍힐 듯
메소드 내로 인자가 전달될 때 객체 복사는 일어나지 않음.
만약에 객체가 복사되는 거라면 test 메소드에서 map=new HashMap();을 삭제한다고 했을때에도 value1이 찍혀야 하나 실제로는 value2가 찍힘
메인메소드에서 메소드 호출할 때 - 레퍼런스를 복사해서 인자로 넘겨주는거 아님요?
레퍼런스가 복사가 되지는 않고 전달되는 맞음
테스트 메소드에서 뉴 해시맵 안 하면 value2가 찍히지 않나 근데?
dd
으으 자바 혐오