> Java > Java베이스 > 문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?

문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?

青灯夜游
풀어 주다: 2020-11-20 09:54:27
원래의
14133명이 탐색했습니다.

차이점: String 클래스는 변경할 수 없는 클래스입니다. String 개체가 생성되면 개체에 포함된 문자 시퀀스는 개체가 삭제될 때까지 변경할 수 없습니다. StringBuffer 개체는 변경 가능한 문자열 개체를 나타내며 스레드로부터 안전합니다. 변경 가능한 문자열 개체를 나타내며 스레드로부터 안전하지 않습니다.

문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?

String, StringBuffer 및 StringBuilder의 차이점:

String

String 클래스는 변경할 수 없는 클래스입니다. 즉, String 개체가 생성되면 The 문자 시퀀스는 객체가 파괴될 때까지 변경할 수 없습니다.

  이것은 String 클래스에 대한 설명입니다. Xiao Xian'er는 이전에 이 상황을 보았을 때 다음과 같이 위의 설명을 이해할 수 없었습니다.

String a = "123";
a = "456";
// 打印出来的a为456
System.out.println(a)
로그인 후 복사

  이것을 보고 Xiao Xian'er는 이해하지 못했습니다. 그 사람이 변한 게 분명해? 불변 클래스라고 말하는 이유는 무엇입니까?

 Xian'er와 그의 친구들의 연구를 통해 String 클래스의 불변성이 어디에 반영되는지 이해합니다. 다음으로 위의 객체
문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?

  의 메모리 저장 공간 다이어그램을 살펴보겠습니다. 여기서 다시 살펴보겠습니다. a가 할당되면 힙의 원래 인스턴스 개체를 다시 할당하지 않고 새 인스턴스 개체를 생성하고 문자열 "456"을 가리킵니다. a는 이전 인스턴스 개체를 가리킵니다. 다시 참조되지 않으면 가비지 수집됩니다.

StringBuffer

StringBuffer 객체는 가변 문자 시퀀스가 ​​있는 문자열을 나타냅니다. StringBuffer가 생성되면 add(), insert(), reverse(), setCharAt() 및 setLength를 통해 처리될 수 있습니다. StringBuffer()에 의해 제공되며 다른 메소드는 이 문자열 객체의 문자 순서를 변경할 수 있습니다. 원하는 최종 문자열이 StringBuffer를 통해 생성되면 해당 toString() 메서드를 호출하여 이를 String 개체로 변환할 수 있습니다.

StringBuffer b = new StringBuffer("123");
b.append("456");
// b打印结果为:123456
System.out.println(b);
로그인 후 복사

                                                              따라서 StringBuffer 개체는 문자 시퀀스 변수 문자열이므로 개체를 재생성하지 않으며 새 개체를 원래 개체 String에 연결할 수 있습니다. StringBuilder 클래스는 변경 가능한 문자열 개체도 나타냅니다. 실제로 StringBuilder와 StringBuffer는 기본적으로 유사하며, 두 클래스의 생성자와 메서드도 기본적으로 동일합니다. 차이점은 다음과 같습니다. StringBuffer는 스레드로부터 안전하지만 StringBuilder는 스레드 안전 기능을 구현하지 않으므로 성능이 약간 더 높습니다.
문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?

StringBuffer는 어떻게 스레드 안전성을 달성하나요?

StringBuffer 클래스에 구현된 메서드:

StringBuilder 클래스에 구현된 메서드:

StringBuffer 클래스의 메서드에 synchronized 키워드가 추가된 것을 볼 수 있습니다. 이 방법은 스레드 안전을 보장하기 위해 잠금이 추가되었습니다.

Java9의 개선 사항

문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?

 Java9에서는 문자열(String, StringBuffer 및 StringBuilder 포함) 구현이 개선되었습니다. Java 9 이전에는 문자열이 char[] 배열을 사용하여 문자를 저장했기 때문에 문자열의 각 문자는 2바이트를 차지했지만 Java 9에서는 문자열이 byte[] 배열과 인코딩 플래그 필드를 사용하여 문자를 저장했기 때문에 문자열이 각 문자를 차지합니다. 단 1바이트. 따라서 Java9의 문자열은 공간을 더 많이 절약하고 문자열의 기능적 방법은 영향을 받지 않습니다.

더 많은 프로그래밍 관련 지식을 보려면

프로그래밍 소개문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?를 방문하세요! !

위 내용은 문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿