2009-01-30 29 views
6

¿Hay alguna diferencia entre concatenar cadenas con '' y ''?Diferencia entre '.' y "." en java

Por ejemplo, ¿cuál es la diferencia entre:

String s = "hello" + "/" + "world"; 

y

String s = "hello" + '/' + "world"; 

Gracias de antemano.

Respuesta

9

"." es una cadena, '.' es un char

24

Literales encerrados entre comillas dobles, p. Ej. "foo", son cadenas, mientras que literales de comillas simples, p. Ej. 'c', son caracteres. En términos de comportamiento de concatenación, no habrá diferencia discernible.

Sin embargo, vale la pena recordar que las cadenas y caracteres no son intercambiables en todos los escenarios, y no puede tener una cadena compuesta por múltiples caracteres.

+0

Para ser pedante, '\ n' es un valor aceptable para un char (aunque, estrictamente, es solo un carácter, incluso si se representa como dos). –

+0

* asentimiento * - Principalmente estaba tratando de señalar que los dos tipos de citas no son intercambiables, ya que están en muchos otros idiomas. – Rob

3

"." es una Cadena que consiste en un solo personaje. ''. es un personaje.

Una vez que los concatenamos juntos no hay diferencia.

+0

Hay una ligera diferencia, es marginalmente más rápido agregar caracteres que Cadenas de un solo caracter. La diferencia es tan mínima que realmente no importa. – Esko

+0

Eso es verdad. Pero podría argumentar que decirle a un novato sobre este tipo de problema menor puede ponerlos en el camino equivocado. :-) – Darron

1

Teóricamente es más rápido agregar un carácter a una cadena: Java 6 parece crear StringBuffers bajo las sábanas y recuerdo haber leído en un sitio de Java Performance que concatenar un carácter será algo más rápido.

3

'' es para caracteres literales.

Por lo que no puede hacer esto:

"OSC" + 'ar' + "Reyes"

Debido ar no es un carácter literal.

En su ejemplo que no hace mucha diferencia porque

'/' 

es un char literal, y

"/" 

es una cadena literal que contiene sólo un carácter.

Además se puede utilizar cualquier carácter UTF con la siguiente sintaxis

'\u3c00' 

lo que también puede utilizar:

"Osc" + '\u3c00' + "ar 
+0

: -/¿Qué pasa con mi respuesta – OscarRyz

+0

? Una cosa que debes recordar es que el Unicode se convirtió al carácter antes de compilar. Entonces '\ u005c' se convertirá a '\', lo que da un error de compilación. –

+0

@Peter: Ooohh !! No sabía esto. Gracias por el comentario: clase Un {String s = "Osc" + '\ u005c' + "ar"; } – OscarRyz

2

Adición de un char es aproximadamente un 25% más rápido que la adición de una cadena de un carácter. A menudo, esto no importa sin embargo, por ejemplo

String s = "hello" + "/" + "world"; 

Esto se convierte en una cadena por el compilador para que nadie concatenación de cadenas/append ocurrirá en tiempo de ejecución en cualquier caso.

12
System.out.println('a'+'b'+'c'); 
> 294 
System.out.println("a"+"b"+"c"); 
> abc 

Lo que sucede aquí es que (char) + (char) = (int) En otras palabras. Use "" para texto para evitar sorpresas.

4

Sólo puede mirar en el JDK :-)

Dadas dos funciones:

public static String concatString(String cs) { 
    return "hello" + cs + "world"; 
} 

public static String concatChar(char cc) { 
    return "hello" + cc + "world"; 
} 

después de examinar el código de bytes que se reduce a dos AbstractStringBuilder.append(String) vs AbstractStringBuilder.append(char).

Ambos métodos invocan AbstractStringBuilder.expandCapacity(int)) que destinará una nueva char [] y finalmente System.arraycopy el contenido antiguo en primer lugar.

Después AbstractStringBuilder.append(char) sólo tiene que poner el carbón dada en la matriz mientras que AbstractStringBuilder.append(String) tiene que comprobar algunas limitaciones y pide String.getChars(int, int, char[], int) que no hace otra System.arraycopy de la cadena anexa.

0

char theLetterA = 'A'; cadena myString = "una cadena";

Cuestiones relacionadas