2 votos

Diferencias entre Null y ""

Bueno, Supongo que el titulo explica casi todo :

String asd  = Null;

String dsa = "";

Diferencias?

2voto

JH Puntos 265

Es null con minúsculas.

En Java, String es una clase más. Cuando declaras String nombre_variable; la variable será de tipo referencia a un String. Como toda referencia se puede poner a null o a una instancia del mismo tipo que declaraste, String sería el tipo en este caso.

String nombre_variable = "";

Esa línea de código crea un nuevo String el cual tiene length() igual a 0. No te sé decir cómo está implementado internamente, podría ser que el array de caracteres interno contenga el caracter nulo '\0' o puede ser que no esté siquiera inicializada. Si hay necesidad de conocer ese detalle debería ser fácil buscarlo en internet. Pero independientemente de cómo la clase String maneje internamente el caso de un string vacío, siempre habrá una instancia de la clase en memoria.

En el caso de poner la palabra clave null a la derecha del signo de igual, lo que estás haciendo es lo mismo que con cualquier otro tipo de referencia en Java. La pones a apuntar a ningún lado. Prueba a hacer esto:

String a = "";
String b = null;
if (a.equals(b)) {
    System.out.println("a y b son iguales.");
} else {
    System.out.println("a y b son diferentes.");
}

Serán diferentes. Para que sean iguales pon b a "" y darán que son iguales. Para que el ejemplo sea mejor todavía pon b a new String("");. Digo de hacerlo con new para forzar al compilador a crear un nuevo String vacío, si no usas new Java es muy capaz de poner a y b referenciando a la misma constante "" (es una de las optimizaciones que al compilador se le puede dar por hacer).

Nota: jamás compares Strings en Java usando el operador de igualdad ==. Es problemático porque compila bien pero lo que ocurre es que se está comparando si a y b apuntan al mismo objeto en memoria. La mayoría de veces lo que te interesará no será si apuntan al mismo objeto sino si su secuencia de caracteres es la misma y para eso debes usar .equals().

En Python, JavaScript y muchos otros lenguajes el operador de igualdad no compara sólo si se referencia a la misma dirección en memoria, también compara si la cadena de caracteres es la misma. Al ser Java parte de la minoría de lenguajes que no lo hace, es conveniente siempre hacerlo notar.

2voto

Manel M. Puntos 410

Si mi inexperiencia no me falla... cuando lo haces con "" significa que el string esta vacio, pero inicializado, pero con null es que inicializas nulo

1voto

ArtEze Puntos 285

Según un emulador de Java que encontré por internet, https://ideone.com/.

Lo primero me da error de compilación.

String asd = Null;

El resultado es este

error: cannot find symbol

Pero lo segundo no me da errores.

String dsa = "";

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: