A Stringнеизменяемо (т.е. текст не может измениться). Он также не имеет связанных с ним промежутков. (Промежутки - это диапазоны по тексту, которые включают информацию о стилях, такую как цвет, выделение, курсив, ссылки и т. Д.). Таким образом, вы можете использовать, Stringкогда ваш текст не нужно изменять и не требует стилизации.
A StringBuilderимеет изменяемый текст, поэтому вы можете изменить его, не создавая новый объект. Однако у него нет никакой информации о диапазоне. Это просто текст. Поэтому используйте, StringBuilderкогда вам нужно изменить текст, но вам не нужно его стилизовать.
A SpannedStringимеет неизменяемый текст (например, a String) и неизменяемую информацию диапазона. Это конкретная реализация требований, определенных Spannedинтерфейсом. Используйте, SpannedStringесли у вашего текста есть стиль, но вам не нужно изменять ни текст, ни стиль после его создания.
Примечание. Не существует такой вещи, как a, SpannedStringBuilderпотому что, если текст изменится, вероятно, также придется изменить информацию о диапазоне.
A SpannableStringимеет неизменяемый текст, но его информация о диапазоне может изменяться. Это конкретная реализация требований, определенных Spannableинтерфейсом. Используйте, SpannableStringкогда ваш текст не нужно изменять, но стиль нужно.
A SpannableStringBuilderимеет изменяемый текст и информацию о диапазоне. Это реализация бетона требований , определяемых Spannableи Editableинтерфейсов ( в том числе). Используйте, SpannableStringBuilderесли вам нужно обновить текст и его стиль.
A CharSequence- это интерфейс, а не конкретный класс. Это означает, что он просто определяет список правил, которым нужно следовать для любого класса, который его реализует. И все упомянутые выше классы реализуют это. Таким образом, вы можете использовать, CharSequenceкогда хотите обобщить тип объекта, который у вас есть, для максимальной гибкости. Вы всегда можете понизить его до Stringили SpannableStringBuilderили чего-то еще, если вам нужно.