일반적으로 Java에서 사용되는 문자열은 변경할 수 없으므로 한 번 생성된 문자열은 수정할 수 없습니다.
String은 아래와 같이 String을 계속 추가할 때마다 새로운 String 객체를 생성하기 때문입니다.
그것은 많은 메모리를 소비하고 성능을 저하시킵니다.
// String을 사용한 코드
String str = "";
for (int i = 0; i < 10000; i++) {
str += "Hello";
str += "World";
}
System.out.println(str);
반면에 StringBuilder를 사용하면 StringBuilder 개체를 사용하여 문자열을 추가하고 메모리를 절약하며 문자열을 고속으로 처리할 수 있습니다. 따라서 문자열을 반복적으로 추가해야 하는 경우 StringBuilder 또는 StringBuffer를 사용하는 것이 좋습니다.
// StringBuilder를 사용한 코드
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append("Hello");
sb.append("World");
}
System.out.println(sb.toString());
그러나 단순히 문자열을 수정하지 않고 읽기 전용으로 사용한다면 String 클래스를 사용하는 것이 맞습니다.
불변 속성이 때때로 이점을 제공하기 때문입니다.
- 스레드 안전성 보장: String 개체는 여러 스레드에서 동시에 읽을 수 있으므로 동기화에 대해 걱정할 필요가 없습니다.
- 캐싱에 적합: 문자열 개체는 자주 사용되며 변경할 수 없기 때문에 캐싱에 적합합니다. 하지만 StringBuilder나 StringBuffer는 자주 바뀌기 때문에 캐싱이 어렵습니다.
- 향상된 코드 안정성: 불변 객체는 값이 변경되지 않기 때문에 예기치 않은 결과를 생성할 가능성이 적습니다.
사용하기 쉬운 문자열 빌더
//객체생성
StringBuilder sb = new StringBuilder();
//문자열추가
sb.append("Hello");
sb.append("world");//"Helloword"
//문자열 삽입
sb.insert(5," "); //"Hello world"
//문자열 삭제
sb.delete(5,6);//5번부터6번인덱스 전까지 문자열 삭제 : "Helloworld"
//문자열 대체
sb.replace(5,6,",");//5번부터 6번인덱스 전까지의 문자열을 ","로 대체함 : "Hello,world"
//문자열 반환
String result = sb.toString();