2010-08-30 23 views
57

¿Cuál es la diferencia entre CharSequence[] y String[]?¿Cuál es la diferencia entre CharSequence [] y un String []?

+0

Es posible que desee agregar una etiqueta java. O alguien con suficiente representante puede hacerlo. – codinguser

+4

Consulte _Eficaz Java 2nd Edition, artículo 52: consulte los objetos por sus interfaces_. 'String' es una' clase', 'CharSequence' es una' interface' (esa 'String' y algunas otras implementan). 'CharSequence []' es más flexible. Dicho esto, _Elemento 25: Preferir listas a matrices_. – polygenelubricants

+1

posible duplicado de [CharSequence VS String en Java?] (Http://stackoverflow.com/questions/1049228/charsequence-vs-string-in-java) –

Respuesta

6

Una CharSequence es una interfaz. String es una secuencia inmutable de caracteres e implementa la interfaz CharSequence. CharSequence [] y String [] son ​​solo arreglos de CharSequence y String respectivamente.

Esto significa que donde quiera que vea CharSequence, puede pasar un objeto String.

68

String implementa la interfaz CharSequence. CharSequence es implementado por String, pero también por CharBuffer, Segment, StringBuffer, StringBuilder.

De modo que una cadena [] y una secuencia de caracteres [] son ​​esencialmente las mismas. Pero CharSequence es la abstracción, y String es la implementación.

Por cierto, '[]' denota una matriz de objetos. Entonces, String[] es una matriz de cadenas. Y String en sí mismo es una matriz de personajes.

+0

En Java String no es exactamente una matriz de caracteres. Los caracteres se almacenan en una matriz, pero nunca se obtiene acceso para garantizar que la cadena sea inmutable. –

0

CharSequence representa un conjunto ordenado de caracteres y define los métodos para examinar este juego de caracteres. Es ineterface, y una implementación de esta interfaz es String class.

Consulte la documentación de la API de Java para obtener más información. Además, este tutorial podría ayudarlo: http://download.oracle.com/javase/tutorial/

+4

Un "conjunto ordenado de caracteres" implicaría que el mismo carácter no puede aparecer dos veces. –

+1

Creo que su comentario debe ser sensible a mayúsculas y minúsculas. Él no dijo 'Set', ¿o sí? –

28

CharSequence representa una interfaz para una secuencia de caracteres, con operaciones comunes a todas las clases que la implementan. Sin embargo, en particular, CharSequence no garantiza si la secuencia es mutable o no. Por lo tanto, puede tener una clase de implementación inmutable, como String o mutables, como StringBuilder y StringBuffer.

Además, CharSequence no refina las implementaciones de propósito general de los métodos equals() o hashCode(), por lo que no hay ninguna garantía de que los objetos de diferentes clases que implementan CharSequence comparará a ser igual, incluso si la secuencia subyacente que sostienen es la misma . Por lo tanto, teniendo en cuenta:

String seq1 = "hello"; 
StringBuilder seq2 = new StringBuilder("hello"); 
StringBuffer seq3 = new StringBuffer("hello"); 

comparaciones entre estos tres utilizando .equals() retorno false en Java 1.6, pero no puedo encontrar ninguna garantía de que esto no va a cambiar en el futuro (aunque es probable que sea bastante improbable).

Y CharSequence[] y String[] son solo matrices de sus respectivos tipos.

EDITAR: El resultado práctico de esto es comparar CharSequence s para la igualdad, usted tiene que utilizar su método toString() y comparar las resultantes String s, ya que esto está garantizado para volver true si las secuencias subyacentes son los mismos.

+2

+1 por la buena explicación – confucius

1

CharSequence es una interfaz. String es una clase que implementa la interfaz CharSequence. Eso significa que un objeto String pasa como un objeto CharSequence. Hay diferentes clases que implementan la interfaz CharSequence. Todos ellos definen los métodos que se correlacionan con las firmas de métodos (¿o métodos abstractos?) que proporciona la interfaz CharSequence.

0

Aquí está mi diagrama que muestra cómo String es uno de varios concrete classes que implementan CharSequenceinterface.

En particular, StringBuilder se usa comúnmente como una alternativa más rápida a los objetos de concatenación String con el operador +, donde no se necesita la seguridad de la hebra.

Los corchetes significa una matriz. Entonces, String[] es una matriz de objetos String, y CharSequence[] es una matriz de objetos que pueden o no ser objetos String pero definitivamente son objetos que implementan la interfaz CharSequence.

Consulte my Answer here y my Answer here para obtener más información.

Cuestiones relacionadas