자바의 CharSequence 대 문자열

1. 소개

간단히 말해, CharSequenceString 은 Java의 두 가지 다른 기본 개념입니다.

이 빠른 기사에서는 이러한 유형의 차이점과 각 유형을 사용하는시기를 살펴 보겠습니다.

2. CharSequence

CharSequence 는 일련의 문자를 나타내는 인터페이스입니다. 이 인터페이스에서는 변경이 적용되지 않습니다. 따라서 변경 가능한 클래스와 변경 불가능한 클래스 모두이 인터페이스를 구현합니다.

물론 인터페이스는 직접 인스턴스화 할 수 없습니다. 변수를 인스턴스화하려면 구현이 필요합니다.

CharSequence charSequence = "baeldung";

여기서 charSequence문자열 로 인스턴스화됩니다 . 다른 구현 인스턴스화 :

CharSequence charSequence = new StringBuffer("baeldung"); CharSequence charSequence = new StringBuilder("baeldung");

3. 문자열

문자열 은 Java의 일련의 문자입니다. 불변 클래스이며 Java에서 가장 자주 사용되는 유형 중 하나입니다. 이 클래스는 CharSequence , SerializableComparable 인터페이스를 구현합니다 .

두 인스턴스 아래 에서 동일한 내용을 가진 문자열 을 만듭니다 . 그러나 그들은 서로 같지 않습니다.

@Test public void givenUsingString_whenInstantiatingString_thenWrong() { CharSequence firstString = "baeldung"; String secondString = "baeldung"; assertNotEquals(firstString, secondString); }

4. CharSequence문자열

CharSequenceString 의 차이점과 공통점을 비교해 보겠습니다 . 둘 다 java.lang 이라는 동일한 패키지에 있습니다. ,하지만 전자는 인터페이스이고 후자는 구체적인 클래스입니다. 또한 String 클래스는 변경할 수 없습니다.

다음 예제에서 각 합계 연산은 다른 인스턴스를 만들고 저장된 데이터 양을 늘리며 가장 최근에 생성 된 문자열을 반환합니다 .

@Test public void givenString_whenAppended_thenUnmodified() { String test = "a"; int firstAddressOfTest = System.identityHashCode(test); test += "b"; int secondAddressOfTest = System.identityHashCode(test); assertNotEquals(firstAddressOfTest, secondAddressOfTest); }

반면에 StringBuilder 는 이미 생성 된 String 을 업데이트 하여 새 값을 유지합니다.

@Test public void givenStringBuilder_whenAppended_thenModified() { StringBuilder test = new StringBuilder(); test.append("a"); int firstAddressOfTest = System.identityHashCode(test); test.append("b"); int secondAddressOfTest = System.identityHashCode(test); assertEquals(firstAddressOfTest, secondAddressOfTest); }

또 다른 차이점은 인터페이스가 기본 제공 비교 전략을 의미하지 않는 반면 String 클래스는 Comparable 인터페이스를 구현한다는 것 입니다.

CharSequence 를 비교 하기 위해 String으로 캐스팅 한 다음 비교할 수 있습니다.

@Test public void givenIdenticalCharSequences_whenCastToString_thenEqual() { CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue(charSeq1.toString().compareTo(charSeq2.toString()) > 0); }

5. 결론

우리는 일반적으로 char 시퀀스에 무엇을 사용해야할지 확실하지 않은 곳에서 String 을 사용합니다. 그러나 어떤 경우에는 StringBuilderStringBuffer 가 더 적절할 수 있습니다.

CharSequenceString 에 대한 JavaDocs에서 자세한 정보를 찾을 수 있습니다 .

그리고 항상 그렇듯이 이러한 모든 예제와 코드 조각의 구현은 Github에서 찾을 수 있습니다.