String 객체는 변경되지 않고 StringBuffer는 변경되지 않는 이유는 무엇입니까?
1514 단어 JAVA 지식
예를 들어 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. 수식류, 무자류, 계승할 수 없고 다시 쓸 수 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
대상과 클래스의 정적 변수, 상수와 방법이전 글의 블로그에서 작성된 Circle () 방법은 인스턴스 메소드에 속하며 그 안의 변수도 인스턴스 변수에 속합니다. 즉, 인스턴스 변수는 클래스에 연결된 특정한 인스턴스이므로 같은 클래스의 다른 객체에 의해 공...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.