Pregunta

OMG. Tengo un pequeño proyecto de hacer y las cadenas me están matando!

Ahora, tengo una cadena que es null (se toma el valor de invocar getParameter() de un servlet).

El problema es que, estoy tratando de ver si es nulo, y, aunque sea nulo, en el programa me está diciendo que no se null, pero más tarde en el programa, cuando estoy usando la variable, lo recibir una excepción diciendo que la variable se null.

    System.out.println("In  " + ID); // in console: In null
    if ((ID == null) || (ID == "null") || ID.equals(null) || **ID.equals("null")**)
    {

       // after I put the 4th condition, the if is working right (WHAT IS THE PROBLEM?)            
        System.out.println("==null");
        this.ID = "";
    }
    else
    {
        System.out.println("!=null");
        this.ID = ID;
    }
    System.out.println("After " + ID);

Lo que estoy haciendo mal?

Sólo la cuarta condición está funcionando! ¿Y el resto (excepto segundo, porque esa condición lo puse porque estaba desesperada)

Me enseñó ID == null o ID.equals(null) va a estar bien, pero no.

Editar  El problema es que, estoy consiguiendo el valor de la ID de un formulario (forma decir- 1 Vamos por lo general). Pero en este caso, estoy usando la forma 2 que no tiene ninguna entrada de identificación, de modo de identificación debe ser null y no "null"

¿Fue útil?

Solución

Desde que se obtiene la cadena desde un servlet puedo decir que esto es normal.

Java convierte una cadena nula para una cadena "nula" en algunas condiciones.

Es evidente que la cadena se recupera no es un valor nulo, pero es una cadena de 4 char "nulo"

¿Por qué no intenta depurar? O simplemente ver lo que hace este retorno:

System.out.println("Length of ID:  " + ID.Length);

Edit: Si usted no recibe una excepción, esto significa que la cadena no es nulo, y también de salida "Longitud de Identificación: 4" significará que la cadena es realmente ID = "nulo"

Edit2: Muy bien, parece que algunos chicos no entienden lo que está pasando aquí y dicen: ¿cómo puede ser una cadena nula "nulo" en algunas condiciones en Java? Les resulta riddiculus. Yo los prefiero probar esto en Java:

String abc = null;
String xyz = "hello"; 
System.out.println(xyz + abc); 

La salida será "hellonull" Ninguna otra cosa ...

También aquí tenemos un servlet. Hay una datos nulos. Servlet envía los datos nulos como "nulo" ¿qué debería hacer? Una cadena vacía? ¡¡¡Venga!!! "

Otros consejos

ID.equals("null")

Es evidente que ID contiene la cadena "null" de cuatro letras. Así que no es null (el valor de "nada").

Vea la Java glosario para más información sobre la constante null. Básicamente una variable tiene el valor null si no hace referencia a ningún objeto. El "null" cadena es un objeto sin embargo, a saber, una instancia de la clase cadena , y en este caso las referencias ID variables este objeto.

(Tenga en cuenta que por convención variables de Java comienzan con una letra minúscula, y acrónimos como identificador se escriben caso completamente inferior, por lo que escribir en lugar de id ID.)

Estas son las cuatro pruebas que has probado. La primera y la cuarta son los únicos que usted debe necesitar.

  • ID == null:? Es el campo 'ID' nulo
  • ID == "null": es el árbitro para el campo 'ID' el mismo que el String recién asignada "nulo"? En general, esto se debe devolver false.
  • ID.equals(null): esto siempre debe devolver false - conceptualmente fuera así siempre verdadero usted debe lanzar un NullPointerException
  • .
  • ID.equals("null"): es el valor de la String 'ID' el mismo que el valor de la String "nulo"
  • ?

Parece que es devolver la cadena "nula" y no un objeto nulo.

Si el resultado era en realidad un nulo a continuación

ID == null

sería suficiente, pero como se mencionó el valor de cadena de ID es, obviamente, "nulo" en lugar del objeto nulo.

Debe utilizar .equals al comparar cadenas en lugar de utilizar == Este blog explica más sobre su: http://blog.enrii.com/2006 / 03/15 / java-string-igualdad-comunes-error /

Por lo tanto, "nulo" no es igual a cero, en Java.

Si el valor viene de un servlet entonces el contenedor es más probable que la conversión de un campo de formulario vacío a una cadena en blanco. Usted debe hacer una verificación contra nulos y en blanco ( "").

if (value==null || value.equals(""))

Alternativamente, puede utilizar el método isEmpty() de la secuencia:

if (value==null || value.isEmpty())

Si el valor de la variable de identificación es la cadena literal "nulo", entonces me imagino que hay un error en el código anterior al recuperar usando el método getParameter (). De acuerdo con la documentación, se supone que el método getParameter () para devolver nulo (la referencia nula) si no hay ningún valor para el nombre especificado. Esto indica que en algún lugar que está haciendo una operación que convierte el resultado a la cadena literal, tal vez concatinating con la cadena vacía (es decir, ID + "";)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top