Test.java
public class Test {
public void run(String rename) {
rename = "김민철";
}
}
Main.java
public class Main {
public static void main(String[] args) {
Test test = new Test();
String name = "홍길동";
test.run(name);
System.out.println("name = " + name);
}
}
위와 같이 코드를 작성하였고 내가 예상했던 출력 결과는 name의 값이 김민철로 나오는 것이였다. 왜냐하면 String 은 참조 타입이고 메서드의 매개 변수로 참조 타입의 값을 주면 자바에서는 자동으로 Call-by-reference 를 호출 하는 줄 알았기 때문이다. 그런데 아래의 출력 결과를 보고 내가 생각했던 게 자바에서는 다르다는 걸 알 수 있었다.
위와 같이 예상 출력 결과인 "김민철" 이 아닌 "홍길동" 이 그대로 출력이 된다. 궁금증을 가지고 구글링을 해보니 아래 게시물을 발견할 수 있었다.
https://deveric.tistory.com/92
[Java] Java는 Call by reference가 없다
Call by Value와 Call By Reference가 뭘까? 프로그래밍을 하다 보면 꼭 알고 넘어가야 하는 개념이 있습니다. 바로 Call By Value, Reference입니다. 어떤 언어를 공부하든 나오는 개념이기도 합니다. Call by value
deveric.tistory.com
바로 자바에서는 Call by reference 를 사용하지 않는다는 것 ..!
많은 깨달음을 얻을 수 있는 게시물이었다.
(왜 내가 봤던 자바 책에는 이런 내용이 없었을까)
자바에서는 Call-by-reference 를 사용하지 않는다는 사실을 명심하자.