java - descargar - ¿Cuál es la diferencia entre CharSequence[] y una cadena[]?
java offline (7)
Aquí está mi diagrama que muestra cómo String
es una de varias clases concretas que implementan la interface CharSequence
.
En particular, StringBuilder
se usa comúnmente como una alternativa más rápida a la concatenación de objetos String
con el operador +
, donde no se necesita la seguridad de subprocesos.
Los corchetes significa una matriz. Entonces, String[]
es una matriz de objetos String
, y CharSequence[]
es una matriz de objetos que pueden ser o no objetos String
pero definitivamente son objetos que implementan la interfaz CharSequence
.
Vea mi Respuesta aquí y mi Respuesta aquí para mucha más discusión.
¿Cuál es la diferencia entre CharSequence[]
y String[]
?
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 definen los métodos que se correlacionan con las firmas del método (¿o los métodos abstractos?) Que proporciona la interfaz CharSequence.
String es la clase padre que implementa la interfaz CharSequence
.
Hay otras clases que también implementan CharSequence
como StringBuffer
, StringBuilder
, etc.
Un CharSequence es una interfaz. String es una secuencia de caracteres inmutable e implementa la interfaz CharSequence. CharSequence [] y String [] son solo matrices de CharSequence y String respectivamente.
Esto significa que donde quiera que veas CharSequence, puedes pasar un objeto String.
String implementa la interfaz CharSequence . CharSequence se implementa mediante String, pero también CharBuffer, Segment, StringBuffer, StringBuilder.
Así que un String [] y un CharSequence [] es esencialmente el mismo. 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 strings. Y String en sí es una serie de caracteres.
CharSequence
representa una interfaz para una secuencia de caracteres, con operaciones comunes a todas las clases que lo implementan. Sin embargo, en particular, CharSequence
no ofrece ninguna garantía sobre si la secuencia es mutable o no. Entonces, puede tener una clase de implementación inmutable, como String
o mutable, 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 garantía de que los objetos de diferentes clases que implementan CharSequence
se comparen para que sean iguales incluso si la secuencia subyacente que tienen es la misma . Entonces, dado:
String seq1 = "hello";
StringBuilder seq2 = new StringBuilder("hello");
StringBuffer seq3 = new StringBuffer("hello");
las comparaciones entre estos tres usando .equals()
devuelven false
en Java 1.6, pero no puedo encontrar ninguna garantía de que esto no cambie en el futuro (aunque probablemente 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, debe usar su método toString()
y comparar las String
s resultantes, ya que se garantiza que devolverá true
si las secuencias subyacentes son las mismas.
CharSequence representa un conjunto ordenado de caracteres y define métodos para examinar este conjunto de caracteres. Es ineterface, y una implementación de esta interfaz es la clase String .
Consulte la documentación de la API de Java para obtener más información. Además, este tutorial puede ayudarlo a usted: http://download.oracle.com/javase/tutorial/