자바에서 String과 StringBuffer의 차이에 대해 간단히 이야기하다

String은 단순한 유형이 아니라 문자 시퀀스를 나타내는 클래스입니다.문자 자체는 유니코드 표준에 부합되며 초기화 방식은 두 가지가 있습니다.
예: String greeting = "Good Morning!";
String greeting=new String(=“Good Morning! ”);
String의 특징은 값을 지정하면 가리키는 문자 대상을 변경할 수 없고, 변경하면 새로운 문자 대상을 가리키는 것이다.
StringBuffer는 객체 참조 전달 특성을 가진 문자열 객체입니다.
StringBuffer 대상은 그 방법으로 동적으로 추가, 삽입, 수정, 삭제 작업을 할 수 있고 그룹처럼 크기를 미리 지정하지 않아도 여러 번 문자를 삽입하고 한 번에 전체적으로 꺼내는 효과를 실현할 수 있기 때문에 문자열을 조작하는 것이 매우 유연하고 편리하다.
StringBuffer를 통해 최종적으로 원하는 문자열을 생성하면 toString 방법을 사용하여 String 객체로 변환할 수 있습니다
이 두 종류가 문자열 처리에서의 위치에 대해서는 말하지 않아도 알 수 있다. 그렇다면 그들은 도대체 어떤 장단점이 있고, 도대체 언제 누구를 써야 하는가?다음 몇 가지 설명 드리겠습니다.
1. 실행 속도에 대한 비교: StringBuffer > String
2. String String: 문자열 상수
StringBuffer: 문자 생성 변수
위의 이름에서 볼 수 있듯이 String은 문자 창상량, 즉 바꿀 수 없는 대상이다.이 말을 이해하면 다음과 같은 의문이 생길 수 있다.

String s = "abcd";  
s = s+1;  
System.out.print(s);// result : abcd1  
우리는 분명히 String형의 변수 s를 바꾸었는데, 왜 변하지 않았다고 말합니까?사실 이것은 사기이다. JVM은 이 코드를 이렇게 해석한다. 먼저 대상 s를 만들고 abcd를 부여한 다음에 새로운 대상 s를 만들어서 두 번째 줄 코드를 실행한다. 즉, 우리의 이전 대상 s는 변화가 없기 때문에 우리는 String 유형은 바꿀 수 없는 대상이라고 말한다. 이런 메커니즘 때문에 String으로 문자열을 조작할 때마다 실제로는 끊임없이 새로운 대상을 만든다.원래 대상은 쓰레기로 변하고 GC에 의해 회수된다. 이렇게 하면 집행 효율이 얼마나 낮을지 짐작할 수 있다.
StringBuffer는 다르다. 그들은 문자열 변수이고 변경할 수 있는 대상이다. 우리가 문자열을 조작할 때마다 실제로는 한 대상에서 조작한다. 그러면 String처럼 외부 대상을 만들어서 조작하지 않을 것이다. 물론 속도가 빠르다.
3. 특별한 예:

String str = “This is only a” + “ simple” + “ test”;   
StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);  
str 대상을 생성하는 속도가 너무 빠르다는 것을 놀라게 될 것이다. 이때 String Buffer는 속도적으로 전혀 우세하지 않다는 것을 알게 될 것이다.사실 이것은 JVM의 수작이다. 사실:

    String str = “This is only a” + “ simple” + “test”; 
사실:

String str = “This is only a simple test”; 
그러니까 시간이 많이 필요 없어요.그러나 여기서 주의해야 할 것은 문자열이 다른 String 대상에서 왔다면 속도가 그렇게 빠르지 않다는 것이다. 예를 들어 다음과 같다.

    String str2 = “This is only a”; 
    String str3 = “ simple”; 
    String str4 = “ test”; 
    String str1 = str2 +str3 + str4; 
이럴 때 JVM은 규칙적으로 원래 방식대로 합니다.
4. StringBuilder와 StringBuffer
StringBuilder: 스레드가 안전하지 않음
StringBuffer: 안전한 스레드
우리가 문자열 버퍼에서 여러 라인에서 사용될 때, JVM은 StringBuilder의 조작이 안전하다는 것을 보장할 수 없다. 비록 그의 속도가 가장 빠르지만, StringBuffer가 정확하게 조작할 수 있다는 것을 보장할 수 있다.물론 대부분의 경우 우리가 단일 라인에서 조작을 하기 때문에 대부분의 경우 StringBuilder를 사용하지 않고 StringBuffer를 사용하는 것이 속도의 원인이다.
세 가지 용도에 대한 요약:
1. 소량의 데이터를 조작하려면 = String
2. 단일 스레드 작업 문자열 버퍼 아래에서 대량의 데이터 작업 = StringBuilder
3. 다중 스레드 조작 문자열 버퍼 아래에서 대량의 데이터 조작 = StringBuffer

좋은 웹페이지 즐겨찾기