string stringbuilder stringbuffer
2421 단어 StringBuilder
일반적인 이해는 다음과 같다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
String, StringBuffer, StringBuilder 어떻게 다른가?이 String 객체는 어떻게 선언을 하냐에 따라 JVM내의 String constant pool에 저장되기도하고, Heap 영역에 저장되기도 한다. 리터럴 방식으로 생성하게 되면 String constant poo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.