string stringbuilder stringbuffer

2421 단어 StringBuilder
string,stringbuilder,stringbuffer를 언급하면 다들 익숙하겠지만,
일반적인 이해는 다음과 같다.
string 대상은final입니다. 생성되면 변경할 수 없습니다.
stringbuffer는 가변 대상입니다. append () 는 새 대상이 되지 않으며, 라인이 안전합니다.
stringbuilder는 라인이 안전하지 않습니다.
위의 이해가 있으면 언제 뭘 써야 할지 쉽게 알 수 있지만,
 
곰곰이 생각해 보니 틀린 것 같지?final로 성명된 클래스는 계승될 수 없을 뿐인데, 왜string의 대상이 되는 것은 변할 수 없는 이유일까?
원본 코드를 자세히 살펴보면 발견할 수 있다.사실stringbuilder와stringbuffer는final로 성명되어 있습니다.
 
 
public final class String 
    implements java.io.Serializable, Comparable<String>, CharSequence

Stringbuilder 클래스 선언:
 
public final class StringBuilder   extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

Stringbuffer 클래스 선언:
 
 public final class StringBuffer    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

 
사실string과stringbuiler,Stringbuffer의 진정한 차이는 다음과 같다.
 
String에서 final char[]를 사용하여 string의 내용을 저장합니다.
 
 
 /** The value is used for character storage. */
    private final char value[];

 
stringbuiler,Stringbuffer의 성명에서 그의 계승은 같은 추상류에서 발견되었고 같은 핑계를 실현했다.
AbstractStringBuilder 클래스에서 char[]를 사용하여 String의 내용을 저장합니다.
 
 
/**
     * The value is used for character storage.
     */
    char value[];

 
따라서string은 변할 수 없는 대상이다.string클래스가final로 성명되었기 때문이 아니라,string클래스에서string내용을 저장하는 수조가final로 성명되었다.
 
 
그리고string류의 새로운string에 대한 전설을 마음대로 검증해 보고string내용을 바꾸는 데 관련된 부분을 살펴보세요.아래 코드를 보실 수 있습니다.
 
 
return new String

 
 
그리고stringbuiler,Stringbuffer 종류를 보면 그들의 방법이 대체로 같다는 것을 발견할 수 있다.단지stringbuffer의 방법은 모두synchronized 키워드가 있기 때문에stringbuffer는 라인이 안전합니다.
그리고 두 가지 종류의 방법체를 보면 모두 부류에 대응하는 방법을 사용하고 있을 뿐이다.그래서 두 종류는 라인 보안을 제외하고는 다르다.기타 조작은 기본적으로 같다.
 
AbstractStringBuilder 클래스 심층, 발견
기본 구축 길이가 16인 그룹,
각 증가 공식은 (length + 1)* 2입니다.
매번 길이가 부족할 때만 확장되며 미리 확장되지 않습니다.
System을 많이 사용합니다.arraycopy 함수 복사 기능 구현
 
 
 
 
 
 
 
 
 
본 사이트 지원pay for your wishes

좋은 웹페이지 즐겨찾기