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
или чего-то еще, если вам нужно.