String은 변경할 수 없는 클래스이며 해당 객체는 생성된 후에 수정할 수 없지만 다른 객체를 확실히 참조합니다. 다중 스레드는 객체의 상태를 변경할 수 없으므로 불변 객체는 스레드로부터 안전하기 때문에 다중 스레드 환경에서 매우 유용합니다.
문자열 버퍼는 문자열의 역순, 문자열 연결 등과 같은 문자열 개체에 대한 작업을 수행하는 데 사용할 수 있는 변경 가능한 클래스입니다. 문자열의 새 개체를 만들지 않고 문자열을 수정할 수 있습니다. 문자열 버퍼도 스레드로부터 안전합니다.
또한 string concat + 연산자는 내부적으로 StringBuffer 또는 StringBuilder 클래스를 사용합니다. 다음은 차이점입니다.
Sr. 아니요. | 키 | 문자열 | 문자열 버퍼 |
---|---|---|---|
1 | 기본 | String은 변경할 수 없는 클래스이며 객체가 생성된 후에는 수정할 수 없습니다. | 문자열 버퍼는 문자열 개체에 대한 작업을 수행하는 데 사용할 수 있는 변경 가능한 클래스입니다. |
2 | 메소드 | 메서드가 동기화되지 않았습니다. | 모든 메소드는 이 클래스에서 동기화됩니다. |
3 | 성능 | 빠르다 | 여러 스레드가 동시에 액세스할 수 없으므로 느림 |
4. | 메모리 영역 | 생성자나 메소드를 사용하여 문자열을 생성하면 해당 문자열은 SringConstantPool뿐만 아니라 힙 메모리에도 저장됩니다. | 힙 공간 |
문자열의 예
public class Main { public static void main(String args[]) { String s1 = "Hello Tutorials Point"; String upperCase = s1.toUpperCase(); System.out.println(upperCase); } }
StringBuffer의 예
public class StringBufferExample{ public static void main(String[] args){ StringBuffer buffer=new StringBuffer("Hi"); buffer.append("Java 8"); System.out.println("StringBufferExample" +buffer); } }