String 은 불변이고 StringBuffer 가변?? 변하기 쉬운 함수. (immutable)


String 이 불변인 이유

  • 보안 : 매개 변수는 일반적 String으로 네트워크 연결, 데이터베이스 연결 URL, 사용자 이름 / 암호 등으로 표시됩니다. 변경 가능한 경우 이러한 매개 변수를 쉽게 변경할 수 있습니다. 
  • 동기화 및 동시성 : 문자열을 불변으로 만들면 스레드가 자동으로 안전 해지고 동기화 문제가 해결됩니다. 캐싱 : 컴파일러가 String 객체를 최적화 할 때 두 객체가 동일한 값 (a = "test"및 b = "test")을 가지므로 하나의 문자열 객체 만 필요하다는 것을 알 수 있습니다. 동일한 객체를 가리킴).
  •  클래스 로딩 : String클래스 로딩을위한 인수로 사용됩니다. 변경할 수있는 경우 잘못된 클래스가로드 될 수 있습니다 (변경 가능한 객체는 상태를 변경하기 때문에)

String s = "test";
s.concat(" value");
System.out.println(s); < --- "test" 출력


String 은 불변이므로 참조만 함


public static void main(String[] args) {
    String str = "Hello"; //--①
    shout(str); //--②
    System.out.println(str);
}

private static void shout(String str){
    str += "!!"; //--③
    System.out.println(str);
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("Hello,");
    list.add("World");
    list.add("!!");
    
    print(list); // >> Hello,World!!
    hoge(list); //hogeメソッドを実行
    print(list); // >> ②
}
private static void hoge(ArrayList<String> list){
    list.set(1, "Hoge");
    print(list); // >> ①
}

참조 : https://www.javatpoint.com/immutable-string