2010-05-11 7 views
12

Aquí está mi código de prueba:Cuando creo un nuevo String en Java, ¿se inicializa con nulo o con ""?

String foo = new String(); 
System.out.println(foo); 

La salida está en blanco y una nueva línea está escrito. Como soy nuevo en Java, no sé si creó una cadena "" o los valores nulos se manejan como líneas en blanco.

+2

Usted puede encontrar fácilmente la respuesta a esta pregunta haciendo 'System.out.println (foo.equals ("")); 'y comparándolo con' System.out.println (foo == null); ' –

+2

... pero no debería ser necesario. Para cualquier clase, "nuevo" le dará una referencia a una nueva instancia de objeto, por lo tanto, nunca podría devolver "nulo". – leonbloy

+0

¿qué hay de usar un depurador para ver el valor? – tster

Respuesta

19

La cadena se inicializa sin caracteres, o "" internamente.

public String() { 
    this.offset = 0; 
    this.count = 0; 
    this.value = new char[0]; 
} 

La fuente anterior se toma del código fuente de Java. Como señaló el otro cartel, las referencias pueden ser nulas o apuntar a un objeto, si crea un objeto String y obtiene una referencia para señalarlo, esa referencia no será nula.

+0

Gracias por la ayuda hermano. ¿Dónde encontraste ese código de constructor de String()? Me gustaría investigar algunos de los otros tipos de base en Java también en lugar de hacer 7 preguntas para cada tipo. –

+1

Si tiene JDK instalado, será en algún lugar como C: \ Program Files \ java \ jdk1.7.0 \ src.zip. Eclipse encuentra esto automáticamente, así que todo lo que tengo que hacer es presionar Ctrl + clic en Cadena :) –

+1

La documentación de String establece explícitamente que String() crea una Cadena vacía. http://java.sun.com/javase/6/docs/api/java/lang/package-summary.html y haga clic en Cadena. – DJClayworth

8

"nulo" es un valor para una variable, no un valor para una Cadena. "foo" puede tener valor nulo, pero un String real no puede. Lo que has hecho es crear una nueva Cadena vacía (como dice la documentación del constructor) y asignarla a foo.

4

new String() crea una cadena de longitud cero. Si simplemente dijeras "String foo"; como variable miembro, se inicializaría a nulo. Si dices "String foo"; como variable de función, no está definida y dará un error de compilación si intenta usarla sin asignar un valor.

1

Se imprimió una nueva línea porque llamó al método println(), que imprime una línea después de imprimir cualquier argumento que haya pasado. nuevo String() devolverá "".

2

Se inicializa con "" (cadena vacía)

public class StringTest { 
    public static void main(String [] args) { 
     System.out.println("".equals(new String())); 
    } 
} 

impresiones:

true 
Cuestiones relacionadas