[JAVA] String & StringBuffer

고민정·2024년 4월 6일

JAVA

목록 보기
23/32


🎇 String & StringBuffer

아래의 두 코드가 어떤점이 다를까?

code1)

//code1
public class StringProblem {
    public static void main(String[] args) {
        String str1 = new String("hello");
        String str2 = new String(" world");
        String str3 = str1 + str2;
        System.out.println(str3);

    }
}

code2)

//code2
public class StringProblem {
    public static void main(String[] args) {
        String str4 = new StringBuffer().append("hello").append(" world").toString();
        System.out.println(str4);        
    }
}

바로 new 연산자의 사용 빈도 차이이다.

자바에서는 new 연산자를 많이 사용하게되면 속도가 느려진다.

반면 StringBuffer 는 자기자신을 반환하기 때문에 새로 만들 필요 없이 한 번의 선언에서 계속 추가가 가능하다.
StringBuffer 에 대한 포스트

그렇기 때문에 StringBuffer 로 append 한 후에 스트링으로 바꿔서 사용하는것이 좋을때도 있다.

더욱 극단적인 예시를 들어보자.


💡 E.g.

아래 코드는 각각 for 문을 사용하여 *을 100개 출력 하고있다.

code1)

public class StringProblem {
    public static void main(String[] args) {
    	//just use String
        String str5 = "";
        for(int i=0;i<100;i++){
            str5 = str5 + "*";
        }
        System.out.println(str5);
    }
}

문자열을 반복문 안에서 사용하는 것은 지양하는 것이 좋다.
문자열을 계속 더하거나, 수정하면 새로운 객체를 생성하게 된다.

새로운 객체를 과도하게 생성하면 속도가 느려질 가능성이 있다.




code2)

public class StringProblem {
    public static void main(String[] args) {
		 //use StringBuffer.append()
        StringBuffer bf1 = new StringBuffer();
        for(int i=0;i<100;i++){
            bf1 = bf1.append("*");
        }
        String str6 = bf1.toString();
        System.out.println(str6);
        }
}

for 문을 사용하여 StringBuffer 를 100번 append 해주고 있다.
마지막에만 문자열로 바꿔서 넣어주면 되기 때문에
첫 번째 코드보다 비교적 속도가 빠르다.

0개의 댓글