StringBuilder과 String `+`연산 실행 속도 차이

Choizz·2023년 3월 21일
0

Java

목록 보기
4/11

오늘은 StringBuilder에 대해 포스팅할려고합니다. 정확히는 String과 StringBuilder의 속도차이에 대해 이야기하려고 합니다.
StringBuffer와 StringBuilder의 차이는 다음 포스팅에 알아보겠습니다!


StringBuilder

StringBuilder 클래스는 변경가능한 문자열의 객체를 생성합니다.

  • 즉, String처럼 불변 객체라서 문자를 수정할 때마다 새로운 객체를 생성하지 않습니다.
  • 하나의 객체로 문자열을 수정하는 것이 가능합니다.
StringBuilder stringBuilder1 = new StringBuilder("test");
System.out.println("stringBuilder1 = " + stringBuilder1); // stringBuilder1 = test
        
StringBuilder stringBuilder2 = stringBuilder1.append("123");
System.out.println("stringBuilder2 = " + stringBuilder2);	// stringBuilder2 = test123

System.out.println(stringBuilder1 == stringBuilder2); //true

위 코드에서 처럼 stringBuilder1stringBuilder2는 동등성 비교에서 동일한 객체입니다.
String은 +연산자를 사용하면, 항상 새로운 객체가 생성된다는 것을 기억해주세요!

String '+' 연산자와 StringBuilder 속도 차이 비교

그렇다면, String과 StringBuilder의 실행 속도 차이를 알아봅시다!

	StringBuilder stringBuilder = new StringBuilder("test");
	long start = System.nanoTime();
	for (int i = 0; i < 100; i++) {
    	stringBuilder.append(i);
	}
	long end = System.nanoTime();
	System.out.println("result time = " + (end - start));
	//result time = 28500
------------------------------
	String str = "test";
	long start1 = System.nanoTime();
	for (int i = 0; i < 100; i++) {
		str = str + i;
	}
	long end1 = System.nanoTime();
	System.out.println("result time = " + (end1 - start1));
	//result time = 5711709

실제로 StringBuilder를 사용했을 때 걸린 시간(28500)과 String + 연산자를 사용했을 때, 걸린 시간(5711709)이 훨씬 오래 걸리는 것을 확인할 수 있습니다.

위에서 언급한 새로운 객체가 생성되는 것과 관련이 있을까요? 한 번 확인을 해보시죠!

 StringBuilder stringBuilder = new StringBuilder("test");

        for (int i = 0; i < 10; i++) {
            long start1 = System.nanoTime();
            stringBuilder.append(i);
            long end1 = System.nanoTime();
            System.out.println("StringBuilder time = " + (end1 - start1));
        }

        String str = "test";
        for (int i = 0; i < 10; i++) {
            long start2 = System.nanoTime();
            str = str + i;
            long end2 = System.nanoTime();
            System.out.println("String time = " + (end2 - start2));
        }
        
 //결과
StringBuilder time = 2334
StringBuilder time = 1500
StringBuilder time = 750
StringBuilder time = 542
StringBuilder time = 375
StringBuilder time = 375
StringBuilder time = 333
StringBuilder time = 334
StringBuilder time = 334
StringBuilder time = 292

String time = 4935500
String time = 4583
String time = 2917
String time = 2500
String time = 2417
String time = 2000
String time = 1958

String이 +연산을 사용하여 새로운 인스턴스를 생성하기 때문에 조금 더 많은 시간이 걸리는 것을 확인할 수 있습니다.

문자열을 수정할 일이 있다면, StringBuilder를 사용하는 것이 빠르다. 특히 여러번 수행할 경우....


다음 포스팅은 StringBuilder와 StringBuffer의 차이를 알아보겠습니다!


Reference

profile
집중

0개의 댓글