StringBuilder

정하윤·2023년 4월 12일
0

StringBuilder

  • 최근에 푼 압축이라는 문제에서 처음써본 StringBuilder에대해 한번 알아보았다.
public class StringBuilder {
    public static void main(String[] args){

        /*
         *  StringBuffer 와 StringBuilder
         *  - String클래스는 한 번 생성되면 그 내부의 문자열이 변경되지 않음
         *  - String클래스를 사용하여 문자열을 계속 연결하거나 변경하는 프로그램을
         *    작성하면 메모리 낭비가 심함
         *  - 이 때, StringBuffer 와 StringBuilder를 활용하면 문자열 변경하거나 연결 가능
         *  - 두 클래스는 크게 차이는 없으며
         *    쓰레드가 동작하는 멀티쓰레드 프로그램이라면 문자열의 안전한 변경을 보장하는
         *    StringBuffer 를 사용하고,
         *    쓰레드가 동작하지 않는 프로그램이라면 실행 속도가 좀 더 빠른
         *    StringBuilder를 사용한다.
         */
        String str = new String("java");
        System.out.println("str 문자열 주소 : " + System.identityHashCode(str));
//     // 인스턴스가 처음 생성됐을 때 메모리 주소 : 1130478920
       System.out.println(str);

       str = str + "and";
       System.out.println("str 문자열 주소 : " + System.identityHashCode(str));
      // => "java and"의 문자열을 갖는 메모리 영역이 새로 생성되었음 주소 다름!


        StringBuilder buffer = new StringBuilder(str);
        System.out.println("str 문자열 주소 : " + System.identityHashCode(buffer));
        str = buffer.toString();
        System.out.println("새로 만들어진 str 문자열 주소 " + System.identityHashCode(str));
        System.out.println(buffer);
        buffer.append("end");
        // buffer에 end 더하기
         System.out.println(buffer);
         System.out.println("str 문자열 주소 : " + System.identityHashCode(buffer));
        // 주소변경 없음!

//       // toString() 을 통해 String 클래스로 변환
//       str = buffer.toString();
//       System.out.println(str);
//       System.out.println("새로 만들어진 str 문자열 주소 " + System.identityHashCode(str));
    }

}

0개의 댓글