String, StringBuffer, StringBuilder의 차이점

2024. 7. 23. 11:04·Java & Spring/Java

코딩테스트 문제를 풀던 중

Stirng "+="연산자 사용과 StringBuilder사용의 성능차이가 발생하는걸 확인하여 그에 대해 학습

구분 Stirng StringBuffer StringBuilder
가변 여부 불변 가변 가변
스레드 세이프 O O X
연산속도 느림 중간 빠름

※ 스레드 세이프란 (thread-safe) ?
멀티 스레드 환경에서 프로그램이나 코드가 여러 스레드에 의해 동시에 실행될 때,

예상치 못한 결과나 오류 없이 정확하게 실행되는 것을 스레드 세이프(thread-safe)라고 합니다.


◇ String

// 스트링 리터럴로 스트링 객체 생성
String str1 = "Hello";
String str2 = "Hello";

// String 클래스의 생성자를 이용해서 스트링 객체 생성
Stirng str3 = new String("Hello");

str1 == str2 // true
str1 == str3 // flase

  1. 리터럴 방식 : 리터럴 방식은 heap 내부 String Constatn Pool을 먼저 조회해 없으면 생성하고 있다면 주소값을 참조함
  2. 생성자 방식 : 매번 새로운 객체를 생성해 heap에 저장

- 연산자 사용 시 새로운 객체가 생성되어 비효율적

 

 

◇ StringBuffer, StringBuilder

StringBuffer과 StringBuilder는 메모리 공간을 미리 확보해두기 때문에 문자 가변시 String보다 효율적이다.

 

※ 차이점

  • Stirng은 가변 시 항상 새로운 객체가 생성됨
  • StringBuffer과 StringBuilder은 처음에 일부 메모리 공간을 할당하여 가변시에도 새로운 객체가 계속 생성되지않음

 

 

 

 

 

'Java & Spring > Java' 카테고리의 다른 글

enhanced switch()문  (0) 2024.07.24
7일차 - Java강의(연산자, 조건문, 반복문, 배열, 컬렉션)  (0) 2024.07.23
Scanner클래스 next()메서드 개행문자 처리  (0) 2024.07.22
6일차 - Java강의(변수, 형변환)  (0) 2024.07.22
Map 기본 문법 및 사용법  (1) 2024.07.22
'Java & Spring/Java' 카테고리의 다른 글
  • enhanced switch()문
  • 7일차 - Java강의(연산자, 조건문, 반복문, 배열, 컬렉션)
  • Scanner클래스 next()메서드 개행문자 처리
  • 6일차 - Java강의(변수, 형변환)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    데이터 타입
    java 제어자
    java 메서드
    java 세수의합
    데이터 크기
    개발로드맵
    java super
    java enhance switch
    java arrays.copyofrnage()
    프로그래머스 java 기초트레이닝
    java 유클리드 호제법
    프로그래머스 java 기초 트레이닝
    java기초
    java 에라토스테네스의 체
    Java 생성자
    java
    Java this
    java 멤버
    java two-pointer
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
String, StringBuffer, StringBuilder의 차이점
상단으로

티스토리툴바