2010-06-27 9 views
10

En Java, ¿estas dos declaraciones son las mismas?null = "" para una cadena

String a = null; 
String b = ""; 

Se siente como una pregunta tonta, pero actualmente tiene un bloqueo mental completo.

+5

Esta es una buena pregunta porque la respuesta varía según el idioma. – Dolph

+3

Puede verificar fácilmente: 'if (a == b) System.out.println (" same "); else System.out.println ("no igual"); ' – MAK

+1

Dolph: además de Oracle, ¿en qué idiomas son nulos y la cadena vacía es la misma? – Gabe

Respuesta

29

La cadena vacía y null son diferentes. La cadena vacía es una cadena sin caracteres, null no tiene una cadena en absoluto.

Puede llamar a los métodos en una cadena vacía, pero si intenta llamar a un método en nulo, obtendrá una excepción.

public static void main(String[] args) 
{ 
    String a = null; 
    String b = ""; 
    System.out.println(b.length()); 
    System.out.println(a.length()); 
} 

Salida:

 
0 
Exception in thread "main" java.lang.NullPointerException 
     at Program.main(Program.java:12) 
2

No, una cadena vacía no es nulo.

2

Definitivamente no son lo mismo. Su variable String actúa como una referencia a un objeto en la memoria, y si se establece en nulo, no apunta a nada. Si se establece en el valor de cadena vacía, apunta a eso.

En mi propia codificación, generalmente configuro una Cadena en "" en lugar de anular a menos que tenga una necesidad especial de nulo. Hay algunas bibliotecas como Apache Commons que incluyen clases de ayuda como StringUtils que colapsarán una comprobación de nulo, la cadena vacía e incluso solo espacios en blanco en una llamada: StringUtils.isBlank(), StringUtils.isNotBlank(), etc. Bastante útil. O puede escribir sus propios métodos de ayuda para hacer similares con bastante facilidad.

¡Buena suerte a medida que avances en Java!

+0

O simplemente llame a String's isEmpty(), sin necesidad de meterse con StringUtils isBlank(). –

+0

Ese método solo ha estado disponible desde Java 6 y, a diferencia de los métodos de StringUtils, no es seguro. – NeantHumain

0

esto no es tan tonto como parece. molesta incluso a los programadores veteranos. en muchos proyectos del mundo real las personas a menudo escriben algo como if(s==null || s.isEmpty()), es decir, las personas tratan null y "" como semánticamente equivalente.

+0

hay muchas líneas como (str! = Null && "" .equals (str.trim()) en el jdk y C# incluso tiene un método String.IsNullOrEmpty(). Aún se siente mal – atamanroman

+0

Como las cadenas son inmutables en C# me parece extraño que todas las cadenas del mismo valor no sean la misma cadena (lo que hace que == esté bien para las cadenas). Sin embargo, es importante que == nulo * no sea * verdadero porque de lo contrario, ¿cómo podemos distinguir entre valores no provistos y valores proporcionados pero vacíos? –

0

null significa que no se refiere a nada, mientras que la cadena vacía es una cadena especial con longitud cero.

1

La tercera posibilidad es:

String c; 

Los tres son diferentes, por supuesto.

+1

a y c no lo son? –

+1

@Graphain: si son miembros de la instancia, son lo mismo, pero si son declaraciones en un cuerpo de método, entonces no son lo mismo. En el último caso, intentar leer la variable c antes de inicializar dará un error de compilación. –

+0

Mi comentario desapareció de alguna manera. Son lo mismo, es solo que c dará un error (dependiendo de tu configuración de compilación, creo) porque no le has dicho explícitamente al compilador "quiero nulo aquí", por lo que cree que lo has olvidado. Sin embargo, son exactamente equivalentes, es decir, c == a. –

0

Cadena a = null;
Cadena b = "";

La primera instrucción en Java inicializa un manejador variable. no hay memoria asignada para que se guarden los datos.

La segunda instrucción muestra dos objetos: el primer objeto es el manejador (b) y el segundo es "" (si ignoramos los conceptos más altos de agrupamiento de cadenas en java donde cadena es mutable y jvm da salidas de cadenas)

por lo tanto, las dos líneas no son iguales.

0

No, son diferentes. Si usa una Cadena nula en un método, entonces Excepción ocurre ¡Pero no ocurre en una Cadena vacía!

Cuestiones relacionadas