String 객체는 변경되지 않고 StringBuffer는 변경되지 않는 이유는 무엇입니까?

1514 단어 JAVA 지식
1. String 객체 불변, StringBuffer 객체 불변의 의미:
예를 들어 String str = "aa", str = "aa"+"bb";
이때str의 값은'aabb'이지만'aabb'는 시작하는 문자열'aa'뒤에 직접 연결된'bb'가 아니라'aabb'를 새로 생성했습니다. 문자열'aa'가 초기화되면 그 값은 다시 바꿀 수 없습니다.
StringBuffer strb = StringBuffer("aa");  strb.append("bb");
이때strb의 값도'aabb'이지만'aabb'는 시작하는 문자열'aa'뒤에 연결된'bb'입니다. 새로운 문자열이 생성되지 않았습니다.
2. String 객체 불변, StringBuffer 객체 불변의 원리:
String 객체의 아래쪽은 실제로char[] 배열입니다.
private final char value[];

final로 수식된 대상의 값은 변할 수 있지만 인용은 변하지 않습니다. 즉:value는 변할 수 없지만,value[] 수조의 값은 변할 수 있지만,private 키워드가 있기 때문에value[] 수조의 값도 변할 수 없는 목적을 봉인합니다. (value[] 변할 수 없는 문제는 다른 블로그에서 분석되었습니다.
StringBuffer 객체의 아래쪽도 char[] 배열입니다.
char[] value;

그러나final로 수식하지 않았기 때문에 수조의 값은 가변적이다.
Java8에서 StringBuffer의 append() 방법으로 문자열의 소스 코드를 변경하는 방법을 보려면 다음과 같이 하십시오.
4
public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }
str.getChars () 방법은str의 모든 문자를value[]의 뒤에 복사하고 원래의value 수조로 되돌려줍니다.
인신final의 의미: 최종적, 바꿀 수 없는.
1. 수식 변수는 상수이고 값은 변할 수 없다.
  2、
코스메틱 객체, 가변 값, 참조 불변;
3. 수식 방법, 방법은 다시 쓸 수 없다.
4. 수식류, 무자류, 계승할 수 없고 다시 쓸 수 없다.

좋은 웹페이지 즐겨찾기