A Stringjest niezmienne (tj. Tekst nie może się zmienić). Nie ma też żadnych powiązanych z nim rozpiętości. (Rozpiętości to zakresy w tekście, które zawierają informacje dotyczące stylu, takie jak kolor, wyróżnienie, kursywa, łącza itp.) Możesz więc użyć znaku a, Stringgdy tekst nie wymaga zmiany i nie wymaga stylizacji.
A StringBuilderma zmienny tekst, więc możesz go modyfikować bez tworzenia nowego obiektu. Jednak nie ma żadnych informacji o rozpiętości. To tylko zwykły tekst. Dlatego używaj a, StringBuildergdy musisz zmienić tekst, ale nie dbasz o stylizację.
A SpannedStringma niezmienny tekst (taki jak a String) i niezmienne informacje o rozpiętości. Jest to konkretna implementacja wymagań zdefiniowanych przez Spannedinterfejs. Użyj a, SpannedStringgdy twój tekst ma styl, ale nie musisz zmieniać ani tekstu, ani stylu po jego utworzeniu.
Uwaga: Nie ma czegoś takiego jak a, SpannedStringBuilderponieważ gdyby tekst się zmienił, informacja o rozpiętości prawdopodobnie również musiałaby ulec zmianie.
A SpannableStringma niezmienny tekst, ale jego informacje o rozpiętości są zmienne. Jest to konkretna implementacja wymagań zdefiniowanych przez Spannableinterfejs. Użyj a, SpannableStringgdy nie musisz zmieniać tekstu, ale styl tak.
A SpannableStringBuilderma zmienny tekst i informacje o zakresie. Jest to konkretna implementacja wymagań zdefiniowanych przez interfejsy Spannablei Editable(między innymi). Użyj, SpannableStringBuildergdy będziesz musiał zaktualizować tekst i jego styl.
A CharSequenceto interfejs, a nie konkretna klasa. Oznacza to, że po prostu definiuje listę reguł, których należy przestrzegać dla każdej klasy, która go implementuje. I wszystkie wymienione powyżej klasy go implementują. Możesz więc użyć a, CharSequencegdy chcesz uogólnić typ obiektu, który masz, aby uzyskać maksymalną elastyczność. Można zawsze przygnębiony go na Stringlub SpannableStringBuilderlub cokolwiek później, jeśli zajdzie taka potrzeba.