String 객체는 한번 생성되어 메모리가 할당되면 메모리 공간이 변하지 않는다.
이는 곧 '+' 연산이나 concat 같이 기존 문자열에 새로운 문자열을 붙이더라도
기존의 String 객체에 붙여지는 것이 아닌
새로운 String 객체를 생성 한 후, 이 객체에 연결된 문자열을 저장하고 참조하도록 한다.
즉 String은 기본적으로 Immutable(불변)이다.
장점
단점
JDK 1.5 이후 부터는 String Class를 사용하더라도
StringBuilder로 컴파일 되기 때문에 성능 상 큰 차이가 없음
다만 반복문을 이용한 문자열 연산을 할 경우 객체 생성이 반복된다는 점은 변함 없음
StringBuffer와 StringBuilder 클래스는 Mutable(가변)
즉, 객체를 한번 만들면 연산을 할 때마다 메모리 크기를 변경시켜서 문자열을 변경
문자열 연산이 많을 때 사용하면 성능 상 이점이 있음
StringBuffer와 StringBuilder의 차이는 동기화 차이
(제공하는 메소드는 서로 동일함)
멀티스레드 환경이면 StringBuffer
싱글스레드 환경이면 StringBuilder