2012-10-03 20 views
6

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?

+1

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. –

+0

@AssenKolov son completamente diferentes en la forma en que se implementan –

+0

@AssenKolov Así que, básicamente, la magia JVM? Nunca lo sabía, gracias – Luke

Respuesta

10

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

+1 por mencionar el grupo constante – tddmonkey

0

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.

12
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)

2
String s = "Hello"; 

JVM lo trata como:

String s = new String("Hello"); y los internos de TI a String grupo como String literal.

+1

Eso es técnicamente incorrecto ya que su ejemplo está creando dos objetos 'String'. – LanguagesNamedAfterCofee

+0

@LanguagesNamedAfterCofee: No estoy seguro de lo que quiere decir, podría ser más específico, para que pueda corregir mi respuesta. – kosa

+1

Se crea el objeto "Hello" <- 'String' ||| nuevo objeto String (...) <- 'String' se crea – LanguagesNamedAfterCofee

Cuestiones relacionadas