Java
[Java] StringBuilder Method
꽃달린감나무
2021. 11. 13. 21:25
728x90
자바의 String클래스의 경우 변경이 불가능한 시퀀스를 생성하기 때문에 이미 정해진 문자열의 값을 변경할 수 없습니다. 그래서 이 대안으로 변경 가능한 시퀀스를 생성하는 클래스 StringBuilder 와 StringBuffer를 사용하면 됩니다.
String 클래스는 왜 불변할까요? 그 이유는 String 클래스 내부에서 값을 final로 고정하여 값을 공유하는데 중점을 두기위해서 입니다.
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence,
Constable, ConstantDesc {
/**
* The value is used for character storage.
*
* @implNote This field is trusted by the VM, and is a subject to
* constant folding if String instance is constant. Overwriting this
* field after construction will cause problems.
*
* Additionally, it is marked with {@link Stable} to trust the contents
* of the array. No other facility in JDK provides this functionality (yet).
* {@link Stable} is safe here, because value is never null.
*/
@Stable
private final byte[] value;
그럼 StringBuilder와 StringBuffer 중에 어떤 것을 사용해야 될까요?
싱글 쓰레드 와 멀티 쓰레드에 환경에 따라 달라집니다. 만약에 한 번에 하나의 작업만을 실행하는 싱글 쓰레드라면 동기화가 되어있지 않고 구현이 빠른 StringBuilder를 사용하고, 한 번 에 여러 개의 작업을 실행하는 멀티 쓰레드라면 동기화가 되어있는 StringBuffer를 사용하시면 됩니다.
public class stringBuilder {
public static void main(String[] args) {
//문자가 없고 초기 용량이 16자인 문자열 빌더를 생성합니다.
StringBuilder str = new StringBuilder();
String c = "";
//to.String은 str이 나타내는 문자열을 반환합니다!
System.out.println(str.toString());
//str 문자열에 hello world 문자열을 추가합니다.
str.append("hello world");
System.out.println(str);
//set.CharAt(index,변환하고 싶은 문자)는 해당하는 index의 값의 문자를 변환하고 싶은 문자로 바꿔줍니다.
for(int i = 0; i <str.length(); i++)
str.setCharAt(i ,'k');
//단, 음수값이 지정되면 java.lang.StringIndexOutOfBoundsException: String index out of range 오류가 발생
//str의 내용을 초기화된 str1을 생성합니다.
StringBuilder str1 = new StringBuilder(str);
System.out.println(str1);
//지정된 문자열을 생성합니다.
StringBuilder str2 = new StringBuilder("Hi String!");
System.out.println(str2);
}
}
https://www.geeksforgeeks.org/stringbuilder-class-in-java-with-examples/ (StringBuilder에 대한 참조문헌)
728x90