java - 字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?
PHPz
PHPz 2017-04-18 10:31:19
0
4
577

字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?

PHPz
PHPz

学习是最好的投资!

모든 응답 (4)
小葫芦

Java의 문자열은 고정 길이 방식으로 메모리에 저장되므로 문자열에 대한 모든 추가, 삭제 및 수정에는 새 메모리 생성과 메모리 복사가 필요합니다.

StringBuffer와 StringBuilder의 처리 방법은 일반적인 문자열 추가, 삭제, 수정과 다릅니다. 잦은 메모리 적용을 피하기 위해 메모리를 먼저 적용합니다.

예를 들어 "a", "b", "c"를 각각 연결합니다. "a" + "b" + "c"를 사용하는 경우(최적화 없이) Java는 먼저 2바이트 메모리를 적용하고 "a"와 "b"를 이 메모리에 복사한 다음 3바이트 메모리를 적용합니다. "ab"와 "c"를 이 메모리에 복사합니다.
StringBuffer 또는 StringBuilder를 사용하면 먼저 큰 메모리(기본값은 16바이트)를 적용합니다. 연결 시 "a", "b" 및 "c"만 이 메모리에 직접 복사하면 됩니다. 즉, 메모리를 반복적으로 신청할 필요가 없습니다. 여기서 먼저 적용하고 사용하는 형태는 완충지대 개념을 반영한 것이다.

    黄舟

    새 개체가 생성되지 않습니다. +가 String과 함께 사용될 때마다 새로운 개체가 생성됩니다. 물론 컴파일러는 짧은 시간 내에 컴파일 최적화를 수행하며 버퍼는 원래 개체에 직접 추가되고 새 개체

      Ty80

      여기서 StringBuilder를 예로 들어 보겠습니다. StringBuilder의 내부 저장소는 char 배열을 사용하여 저장됩니다. 추가 시 내부 버퍼가 부족할 경우 다음 문자열이 char 배열에 복사됩니다. Go to System.arrayCopy를 사용하여 매우 효율적인 확장 메커니즘을 구현합니다. 이것이 버퍼링이 구현되는 방식입니다.

      String d = "a" + "b" + "c"; 위에서 답변한 것처럼 가상 머신 내부에 문자열 버퍼 풀이 있기 때문입니다.

        Peter_Zhu

        보통 "a" + "b" + "c"

        은 "ab" 문자열 객체를 생성하는

        입니다.

        그러나 이 두 클래스를 사용하면 마지막 "abc" 객체만 생성됩니다

          최신 다운로드
          더>
          웹 효과
          웹사이트 소스 코드
          웹사이트 자료
          프론트엔드 템플릿
          회사 소개 부인 성명 Sitemap
          PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!