Si se puede iniciar con sólo¿Por qué String es una clase?
String s = "Hello";
entonces por qué es una clase? ¿Dónde están los parámetros?
Si se puede iniciar con sólo¿Por qué String es una clase?
String s = "Hello";
entonces por qué es una clase? ¿Dónde están los parámetros?
Dado que String
es una clase tan útil y se utiliza con frecuencia, tiene una sintaxis especial (a través de una representación literal de cadena: el texto dentro ""
) para la creación de sus instancias, pero semánticamente estos dos son equivalentes:
String s = "Hello"; // just syntactic sugar
String s = new String("Hello");
Detrás de la campana de ambas formas son no 100% en equivalentes, ya que la sintaxis usando ""
intenta volver a utilizar cuerdas de grupo de cadena de Java, mientras que la creación de instancias explícita con new String("")
siempre va a crear un nuevo objeto.
Pero no nos equivoquemos, ya sea que la sintaxis produzca una referencia a una instancia de objeto, las cadenas no se consideran tipos primitivos en Java y son instancias de una clase, como cualquier otra.
+1 por mencionar el grupo constante – tddmonkey
La línea que tiene en el ejemplo está creando un objeto String. No hay ningún parámetro en el sentido tradicional en el que estés pensando.
String s = "Hello";
es simplemente azúcar sintáctico. En realidad está implementado como un tipo de referencia. (Es un tipo de referencia inmutable, por lo que no se puede cambiar)
Desde el §4.3.3 of the Java Specification:
literales de cadena son referencias a instancias de la clase
String
.
Y desde §3.10.5:
Una cadena literal es una referencia a una instancia de la clase
String
String s = "Hello";
JVM lo trata como:
String s = new String("Hello");
y los internos de TI a String
grupo como String
literal.
Eso es técnicamente incorrecto ya que su ejemplo está creando dos objetos 'String'. – LanguagesNamedAfterCofee
@LanguagesNamedAfterCofee: No estoy seguro de lo que quiere decir, podría ser más específico, para que pueda corregir mi respuesta. – kosa
Se crea el objeto "Hello" <- 'String' ||| nuevo objeto String (...) <- 'String' se crea – LanguagesNamedAfterCofee
Su pregunta ya tiene bastantes buenas respuestas, solo una nota que también podría hacer: Entero i = 5; Long l = 6L; etc., mientras que Integer es definitivamente una clase también. Azúcar sintáctica. –
@AssenKolov son completamente diferentes en la forma en que se implementan –
@AssenKolov Así que, básicamente, la magia JVM? Nunca lo sabía, gracias – Luke