만약에
void f(string s) {
    s += '1';
}
이렇게 정의되있을 때, 이거를 
string str="abc";
f(str);
이렇게 호출하면 다음과 같은 일이 벌어짐

===== C++ =====
1) 스택상에 메모리 할당 
2) str을 새로 할당한 영역에 복사 (이게 f 내부의 s임)
3) 함수 호출 
3-1) s.append('1')
3-1-1) s를 변경시킴
3-2) s 소멸 
4) 복귀
====> str은 변하지 않는다.

===== 자바 ===== 
1) 레퍼런스를 복사
2) 호출 
2-1) s.append('1')
2-1-1) 컴파일러는 이 구문을 내부적으로 s = new StringBuffer().append(s).append('1').toString(); 로 번역해서 컴파일함
2-1-2) s는 레퍼런스 타입이므로, 이 구문 후에 s는 새로운 string 객체를 가리킴. 원래의 str에는 영향이 없다.
3) 복귀
====> str은 변하지 않는다.


여기서 봐야할 것은 
1) call by value, call by reference
2) string 클래스의 mutability