소환사쇽쇽
2k
2021-09-23 09:35:07
2
114

JAVA에서 String을 매개변수로 전달하고 변경했을 때 값 변화에 대해 궁금한 점이 있습니다.



public class SimpleTest {
	public int testInt = 0;
	public String testStr = "abc";

	public static void main(String[] args) {
		String str = "abcd";
		changeString(str);
		System.out.println(str);
		System.out.println("====================");
		SimpleTest st = new SimpleTest();
		System.out.println(st);
		changeObject(st);
		System.out.println(st);
	}
	
	public static void changeString(String str) {
		str = "";
	}
	
	public static void changeObject(SimpleTest st) {
		st.testInt = 1;
		st.testStr = "efgh";
	}

	@Override
	public String toString() {
		return "SimpleTest [testInt=" + testInt + ", testStr=" + testStr + "]";
	}
}

위 코드 실행 결과 아래와 같이 출력됩니다.

abcd

====================

SimpleTest [testInt=0, testStr=abc]

SimpleTest [testInt=1, testStr=efgh]

changeString이라는 메서드에 String 타입의 객체를 전달해서 값을 ""로 변경했습니다.

그런데 메서드밖에서 출력했을 때 변경사항이 반영 안 되는지 궁금합니다.

String도 원시타입이 아니라 객체이고 파라미터 전달시 주소값이 전달되니까 메서드 내부에서 수정한 사항이 밖에서도 반영되어야 하는 것 아닌가요?

0
  • 답변 2

  • monotonicity
    223
    2021-09-23 10:05:56

    지금 하고 계신건 str 변수에 ""를 대입하는거지 str이 가르키는 String을 변경시키는게 아닙니다. 

  • 소환사쇽쇽
    2k
    2021-09-23 12:25:33

    monotonicity

    감사합니다. 이해했습니다.

    새로운 String 객체인 ""의 주소값을 대입한 것이 되겠네요.

    파라미터로 전달 받은 주소의 객체를 수정한 것이 아니라.

  • 로그인을 하시면 답변을 등록할 수 있습니다.