>  기사  >  Java  >  Java의 String, StringBuffer 및 StringBuilder 간의 차이점에 대한 자세한 설명

Java의 String, StringBuffer 및 StringBuilder 간의 차이점에 대한 자세한 설명

黄舟
黄舟원래의
2017-08-20 09:35:081623검색

이 글에서는 주로 Java에서 String, StringBuffer, StringBuilder의 차이점과 이를 사용하는 방법에 대한 정보를 소개합니다. String 클래스는 개발 과정에서 작업에 자주 사용됩니다. StringBuffer와 StringBuilder 사이 및 사용 방법

1. String 클래스


String의 값은 변경할 수 없으므로 String에 대한 각 작업의 결과는 비효율적일 뿐만 아니라 제한된 메모리 공간의 낭비가 많습니다.

String a = "a"; //a가 0x0001 주소를 가리킨다고 가정

a = "b";//재할당 후 a는 0x0002 주소를 가리키지만 "a"는 0x0001 주소에 저장됩니다. 여전히 존재하지만 더 이상 a가 가리키는 것이 아니며, a는 이미 다른 주소를 가리킵니다.

따라서 문자열 연산은 값을 변경하는 것이 아니라 할당 주소를 변경하는 것입니다.

2. StringBuffer는 변경 가능한 클래스이며

스레드로부터 안전한 문자열 작업 클래스입니다. 이 클래스가 가리키는 문자열에 대한 작업은 새 개체를 생성하지 않습니다. 각 StringBuffer 객체에는 특정 버퍼 용량이 있습니다. 문자열 크기가 용량을 초과하지 않으면 새 용량이 할당되지 않습니다. 문자열 크기가 용량을 초과하면 용량이 자동으로 늘어납니다.

  StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
  StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
  StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。


3. StringBuffer

StringBuffer 클래스와 StringBuilder 클래스의 기능은 기본적으로 유사하지만 StringBuffer 클래스의 메서드는 스레드로부터 안전하지 않다는 점입니다. 이에 비해 StringBuilder 클래스는 약간 더 빠릅니다. 값이 자주 변경되는 문자열의 경우 StringBuffer 및 StringBuilder 클래스를 사용해야 합니다.

1) 우선 JDK에서는 String, StringBuffer, StringBuilder가 모두 final 클래스로 정의되어 있어 상속이 불가능합니다.

2) String은 StringBuffer와 비교할 때 String 유형이 변경될 때마다 새 String 객체가 재생성되므로 성능이 저하됩니다. 이는 문자열 접합 작업 중에 명백하므로 문자열이 자주 변경되어서는 안 됩니다. 멀티스레딩을 고려하지 않는 경우에는 StringBuilder를 사용해야 합니다.

3) StringBuffer가 객체를 생성한 후 문자열 접합 작업을 수행할 때 추가 메서드를 호출하기만 하면 새로운 객체가 생성되지 않으며 객체 자체만 작동되며 성능은 String보다 높습니다. 또한 StringBuffer는 스레드로부터 안전하므로 멀티 스레드에서 사용하기에 적합합니다. 이로 인해 StringBuilder보다 속도가 느려집니다.

4) StringBuilder의 사용법은 StringBuffer와 유사하지만 스레드로부터 안전하지 않기 때문에 일반적으로 단일 스레드에서 사용되며 StringBuffer보다 효율적입니다.

요약하자면, 어떤 것을 선택할지는 메모리 성능, 스레드 안전성, 실행 효율성 등 여러 측면을 고려해야 합니다. 답은 위의 비교에서 얻을 수 있습니다.

위 내용은 Java의 String, StringBuffer 및 StringBuilder 간의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.