memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

String

String은 불변성(Imutable)을 가진 객체로 + 연산자를 통해 문자열을 생성하는 경우, 새로운 문자열을 반환한다.

String greet = "Hello";
System.out.println(greet.hashCode());

greet += " World";
System.out.println(greet.hashCode());
69609650
-862545276

+ 연산 후 주소값이 달라짐. 즉, 가리키는 문자열이 달라짐

 

StringBuilder & StringBuffer

StringBuilderStringBuffer는 String에 문자열을 추가하면 새로운 객체를 반환하는 단점을 보완하여 만들어진 클래스이다.

 

StringBuilderStringBuffer는 버퍼(Buffer)에 데이터를 임시로 저장하고 있고,

toString() 메소드를 통해 만들어진 전체 문자열을 반환한다. 그래서, 둘 다 추가/수정/삭제에 용이하다는 장점이 있다.

 

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
// 전체 문자열 출력
System.out.println(sb.toString()); // Hello World

// 문자열 삽입
sb.insert(11, "!");
System.out.println(sb.toString()); // Hello World!

// 문자열 교체
sb.replace(6, 11, "Java");
System.out.println(sb.toString()); // Hello Java!

// 문자열 삭제
sb.delete(5, 10);
System.out.println(sb.toString()); // Hello!
Hello World
Hello World!
Hello Java!
Hello!
  • StringBuilder나 StringBuffer나 사용방법은 동일하다

 

StringBuilder와 StringBuffer의 차이점

  • StringBuilder는 동기화를 지원하지 않기 때문에, 단일 스레드 환경에서 사용
  • StringBuffer는 동기화를 지원하기 때문에, 멀티 스레드 환경에서 사용

 

성능으로 봤을때는 StringBuilder가 2배가량 좋기 때문에, 단일 스레드 환경이라면 StringBuilder를 사용하는 것이 좋다.

 

 

삽입 성능 비교

출처: https://javapapers.com/java/java-string-vs-stringbuilder-vs-stringbuffer-concatenation-performance-micro-benchmark/

 

관련 글

2021/03/07 - [Language/JAVA] - Java - String Pool에 대해서

 

Java - String Pool에 대해서

String Pool String을 이용하여 문자열을 생성하는 방법은 2가지가 있다. 문자열 리터럴을 이용하여 생성 new 연산자를 통해 String 객체를 생성하는 방법 위 2개 방법 모두 Heap 영역에 데이터가 저장

memostack.tistory.com

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!