String a = "Hello World";
String b = "Hello World";
System.out.pritln(a == b); //reference가 같은지 비교
String a="" ;
for(int i =0; i < 10; i++){
a += i;
}
변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용
추가,수정,삭제 등의 연산이 빈번하게 발생하는 경우 힙메모리 부족으로 어플리케이션 성능에 치명적인 영향
=> StringBuffer/StringBuilder 도입
StringBuffer sb = new StringBuffer();
for(int i =0; i < 10; i++){
sb.append(i);
}
동기화가 되어있다(멀티쓰레드에 안전)
String처럼 문자형 배열(char[])을 내부적으로 가지고 있다
그러나 String과 달리 변경할 수 있다.(가변)
append()는 지정된 내용을 StringBuffer에 추가 후 , StringBuffer의 참조를 반환
String 클래스는 불변하기 때문에 문자열을 수정하는 시점에 새로운 String인스턴스 생성
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb = new StringBuffer("abc");
System.out.println(sb.equals(sb2)); //false
//String으로 변환후에 equals() 비교 가능
String s = sb.tostring();
String s2 = sb2.tostring();
System.out.println(s.equals(s2)); //true
동기화 되어있지 않다.
멀티쓰레드 프로그램이 아닌경우 동기화는 불필요한 성능저하
→ 이럴 때 StringBuffer 대신 StringBuilder 사용하면 성능 향상
String : 문자열 연산이 적고 멀티쓰레드 환경
StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경
StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하 지 않을 경우