CharSequence対。Javaの文字列
1. 序章
簡単に言えば、CharSequenceとStringは、Javaの2つの異なる基本概念です。
この簡単な記事では、これらのタイプの違いと、それぞれをいつ使用するかを見ていきます。
2. CharSequence
CharSequence は、文字のシーケンスを表すインターフェイスです。 このインターフェースでは、可変性は強制されません。 したがって、可変クラスと不変クラスの両方がこのインターフェースを実装します。
もちろん、インターフェースを直接インスタンス化することはできません。 変数をインスタンス化するための実装が必要です。
CharSequence charSequence = "baeldung";
ここで、 charSequenceはStringでインスタンス化されます。他の実装のインスタンス化:
CharSequence charSequence = new StringBuffer("baeldung");
CharSequence charSequence = new StringBuilder("baeldung");
3. 文字列
String は、Javaの文字のシーケンスです。 これは不変のクラスであり、Javaで最も頻繁に使用される型の1つです。 このクラスは、 CharSequence 、 シリアル化可能 、 と同程度の
両方のインスタンス化の下に、同じコンテンツでStringsを作成します。 ただし、それらは互いに等しくありません。
@Test
public void givenUsingString_whenInstantiatingString_thenWrong() {
CharSequence firstString = "baeldung";
String secondString = "baeldung";
assertNotEquals(firstString, secondString);
}
4. CharSequence対。 文字列
CharSequenceとStringの違いと共通点を比較してみましょう。 これらは両方ともjava.lang。という名前の同じパッケージにありますが、前者はインターフェースであり、後者は具象クラスです。 さらに、Stringクラスは不変です。
次の例では、合計操作ごとに別のインスタンスが作成され、保存されるデータの量が増え、最後に作成された 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);
}
もう1つの違いは、インターフェイスが組み込みの比較戦略を意味しないのに対し、 弦クラスは同程度の
2つの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を使用します。 ただし、場合によっては、StringBuilderおよびStringBufferの方が適切な場合があります。
CharSequenceおよびString。に関する詳細については、JavaDocsを参照してください。
そして、いつものように、これらすべての例とコードスニペットの実装は、Githubのにあります。