Difference between String, StringBuilder, and StringBuffer Class 차이점 / Java c++ 문자열, example 예제
Difference Between String , StringBuilder And StringBuffer Classes
(영어 원문 사이트) 확인은 여기로
String
String is immutable ( once created can not be changed )object . The object created as a
String is stored in the Constant String Pool.
Every immutable object in Java is thread safe ,that implies String is also thread safe . String
can not be used by two threads simultaneously.
String once assigned can not be changed.
String 클래스는
immutable 하다 (한번 만들어지면 바뀌지 않는 객체이다). String으로 만들어진 객체는 Constant String pool 에 저장된다.
자바의 모든 immutable 불변 객체는 thread safe 하다, String 또한 thread safe 하다는 얘기.
String은 두 Thread가 동시에 사용할 수 없다. String은 한번 생성되면 변경할 수 없다.
이 말들은 String 객체는 heap 영역에 할당되고, 내용이 바뀌면 수정을 하는 것이 아니라 새로 할당하고 새로 생긴 주소값으로 포인터를 바꿔치기 하는 것 같다.
StringBuffer
StringBuffer is mutable means one can change the value of the object . The object created
through StringBuffer is stored in the heap. StringBuffer has the same methods as the
StringBuilder , but each method in StringBuffer is synchronized that is StringBuffer is thread
safe .
Due to this it does not allow two threads to simultaneously access the same method . Each
method can be accessed by one thread at a time .
But being thread safe has disadvantages too as the performance of the StringBuffer hits due to thread safe property . Thus StringBuilder is faster than the StringBuffer when calling the same methods of each class.
String Buffer can be converted to the string by using toString() method.
StringBuffer
StringBuffer 는 객체를 변화 시킬수 있는 mutable 한 객체이다. StringBuffer를이용해 만들어진 객체는 heap 영역에 저장된다. StringBuffer는 StringBuilder와 같은 method들을 가지고 있는데, StringBuffer는 sychronized 되어있어서 thread safe(다중스레드에서 안전하다) 하다.
이 때문에 (thread safe 하기 때문에) 같은 method를 여러 thread에서 동시에 접근할 수 없게 되어있다. 각 method는 한번에 한개의 thread에 의해 접근될 수 있다.
하지만 thread safe 는 safe property 때문에 퍼포먼스에서 단점이 있다. 따라서 StringBuilder 가 StringBuffer 보다 빠르다 - 각 클래스에서 같은 메소드를 호출한다고 했을때.
StringBuffer는 toString() method 를 이용하여 String으로 변환될 수 있다.
e.g.
StringBuffer demo1 = new StringBuffer("Hello") ;
// The above object stored in heap and its value can be changed .
demo1=new StringBuffer("Bye");
// Above statement is right as it modifies the value which is allowed in the StringBuffer
StringBuilder
StringBuilder is same as the StringBuffer , that is it stores the object in heap and it can also
be modified . The main difference between the StringBuffer and StringBuilder is
that StringBuilder is also not thread safe.
StringBuilder is fast as it is not thread safe.
StringBuilder
StringBuilder 는 StringBuffer와 똑같이 heap 영역에 저장되고, 변경될 수 있다. 메인이 되는 차이점으로는 StringBuilder 는 thread safe 하지 않다. StringBuilder 는 not thread safe 만큼 속도가 나온다.
e.g.
StringBuilder demo2= new StringBuilder("Hello");
// The above object too is stored in the heap and its value can be modified
demo2=new StringBuilder("Bye");
// Above statement is right as it modifies the value which is allowed in the StringBuilder
TO SUM UP
String -> stored in heap /
immutable (cannot modify after creating)
-> so stacked in memory till garbage collector do clean /
thread safe
StringBuffer -> stored in heap /
mutable (can be modified after creating) /
thread safe
StringBuilder -> stored in heap /
mutable (can be modified after creating) /
not thread safe
정리하면
String -> 힙에 저장된다 /
불변하다 (만들어지면 수정이 안됨)
-> 항상 새로운 객체를 만들어 가비지컬렉터가 동작할 때까지 메모리에 쌓임 /
thread safe 하다 (한번에 한 thread 접근 가능)
StringBuffer -> 힙에 저장된다 /
수정가능하다 (만든 후 객체 수정 가능) /
thread safe 하다
StringBuilder -> 힙에 저장된다 /
수정가능하다 /
thread safe 하지 않다.
Code... lemme see code!!!!!!!!
코드... 코드를 보자!!!!!!!!!!
public static void main(String[] args) {
String testString = "String object";
StringBuffer testStringBuffer = new StringBuffer("StringBuffer object");
StringBuilder testStringBuilder = new StringBuilder("StringBuilder object");
System.out.println(testString);
System.out.println(testStringBuffer);
System.out.println(testStringBuilder);
System.out.println("");
testString += " add this";
testStringBuffer.append(" add this");
testStringBuilder.append(" add this");
System.out.println(testString);
System.out.println(testStringBuffer);
System.out.println(testStringBuilder);
System.out.println("");
}
Something else you may like......