진짜 개발자
본문 바로가기

Language/Java

Java - String 과 StringBuffer 클래스

728x90


* String 은 불변 클래스이다 !


       String hi = "hello";

  hi += " world";

System.out.println(hi);


         => hello world 


  ? String 은 불변 클래스라고 하지 않았던가 

  어떻게 이런일이 가능한지 살펴보자


  java 에서는 String값에 변화가 필요할경우 아래와 같은 작업이 일어난다


         

  1. String hi = "hello";

      => 가장먼저 JVM 메모리 상수풀에 "hello" 라는 문자열이 넣어지고 그 주소를 hi 변수가 가리키게 된다.  


       hi -> "hello"

     

  2.  hi += " world"; 

      String은 불변객체이므로 직접 값을 바꿀수 없다 

      따라서 먼저 StringBuffer 란 객체를 생성하고 원래의 String 값을 넣는다

      new StringBuffer(hi);


  2. 그 다음 문자열을 더한다

      StringBuffer(hi).append(" world");


  3. 그런다음 hi변수에 대입한다

      hi = StringBuffer(hi).append(" world");


  4. 이렇게 되면 원래의 상수풀에 있던 "hello" 라는 값을 가리키는 변수가 없다면

      상수풀에서 값이 사라지게 되고 

      "Hello world" 라는 값이 저장되고 그 값을 hi변수가 가리키게 된다

      

      "hello"


      hi -> "hello world"



* 따라서 자주 바뀌는 문자열의 경우에는 StringBuffer를 사용하는 것이 좋다

  

   => 

1
2
3
4
5
6
7
8
9
10
11
12
StringBuffer sb = new StringBuffer();
 
        sb.append("hello");
 
        sb.append(" ");
 
        sb.append("world");
 
        String result = sb.toString();
 
        system.out.println(result);
  
cs

  

         hello world