본문 바로가기

Programming

Difference between String, StringBuilder, and StringBuffer Class 차이점 / Java c++ 문자열, example 예제

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......




2018/11/02 - [Programming/Java] - Apache POI library excel file read to make Mat in openCV / 아파치 POI 라이브러리 엑셀파일 읽기 OpenCV Mat 만들기 (java, c++)



2018/10/29 - [Programming/Image Processing] - Matlab - Difference between mean and mean2 in Matlab, Matlab mean/mean2 함수 차이점, opencv java c++



2018/10/28 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #21 isIPv4Address. Algorithm, 알고리즘, Codefights, CodeSignal, regx, 정규표현식, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/28 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #20 arrayMaximalAdjacentDifference. Algorithm, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/27 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #19 AreEquallyStrong. Algorithm, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar



2018/10/19 - [Programming/Design Pattern ] - Design pattern - Prototype (디자인패턴 - 프로토타입) / Java C++ C#