아래의 소스 코드 실행시 동일하게 참조변수로써 주소값을 인자로 넘겨주는데 어째서 String str은 값이 변하지 않고 String[] str2는 값이 변화하게 되는것인가요? 출력값은 str은 "aa" 이고 str2는 "아" 입니다 ``` public class Test5 { static String set(String str) { return str = "아"; } static String set(String[] str) { return str[0] = "아"; } public static void main(String[] args) { String str = "aa"; String[] str2 = new String[10]; set(str); set(str2); System.out.println(str); System.out.println(str2[0]); } } ```
## 조금 특별한 자바 String ### 요약 쌍따옴표를 사용하여 문자열을 선언한 경우 매개변수를 통해 값을 변경 할 수 없습니다. ### 설명 자바 String은 JVM이 직접 관리하는 특별한 객체입니다. 아래와 같은 형식으로 문자열을 선언한 경우, 해당 문자열은 JVM에 의해 `global string table`로 관리되어 집니다. ``` String str1 = "something"; String str2 = "something"; ``` 왜 전역변수로 관리할까요? 중복되는 메모리 낭비를 막기 위함입니다. 따라서 위 코드의 경우, 하나의 문자열 객체만 생성됩니다. JVM의 관리가 아닌 개별관리를 원한다면, 아래의 방식을 사용해야합니다. ``` String str3 = new String("something); ``` 질문하신 문제는 위와 같은 이유로 발생되었습니다.