차이점: 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 클래스에 구현된 메서드:
StringBuilder 클래스에 구현된 메서드:
StringBuffer 클래스의 메서드에 synchronized 키워드가 추가된 것을 볼 수 있습니다. 이 방법은 스레드 안전을 보장하기 위해 잠금이 추가되었습니다.
Java9의 개선 사항 Java9에서는 문자열(String, StringBuffer 및 StringBuilder 포함) 구현이 개선되었습니다. Java 9 이전에는 문자열이 char[] 배열을 사용하여 문자를 저장했기 때문에 문자열의 각 문자는 2바이트를 차지했지만 Java 9에서는 문자열이 byte[] 배열과 인코딩 플래그 필드를 사용하여 문자를 저장했기 때문에 문자열이 각 문자를 차지합니다. 단 1바이트. 따라서 Java9의 문자열은 공간을 더 많이 절약하고 문자열의 기능적 방법은 영향을 받지 않습니다. 더 많은 프로그래밍 관련 지식을 보려면프로그래밍 소개를 방문하세요! !
위 내용은 문자열, 문자열 버퍼 및 문자열 빌더의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!