¿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.
¿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.
"." es una cadena, '.' es un char
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.
"." es una Cadena que consiste en un solo personaje. ''. es un personaje.
Una vez que los concatenamos juntos no hay diferencia.
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
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
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.
'' 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
: -/¿Qué pasa con mi respuesta – OscarRyz
? 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. –
@Peter: Ooohh !! No sabía esto. Gracias por el comentario: clase Un {String s = "Osc" + '\ u005c' + "ar"; } – OscarRyz
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.
Es probable que encuentre los siguientes artículos útiles:
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.
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.
char theLetterA = 'A'; cadena myString = "una cadena";
Para ser pedante, '\ n' es un valor aceptable para un char (aunque, estrictamente, es solo un carácter, incluso si se representa como dos). –
* 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