traducir sale porque pointer error catch java string null nullpointerexception

java - sale - nullpointerexception processing



String dice que no es nulo, pero luego lanza NullPointerException (7)

Aquí están las cuatro pruebas que has probado. El primero y el cuarto son los únicos que deberías necesitar.

  • ID == null : ¿el campo ''ID'' es nulo?
  • ID == "null" : ¿la referencia para el campo ''ID'' es la misma que la String recientemente asignada "null"? Esto generalmente debería ser falso.
  • ID.equals(null) : esto siempre debe ser falso. Conceptualmente, si esto fuera cierto, debería lanzar una NullPointerException .
  • ID.equals("null") : ¿el valor de la "ID" de String el mismo que el valor de la String "nulo"?

DIOS MIO. ¡Tengo un pequeño proyecto que hacer y las Cuerdas me están matando!

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

El problema es que, estoy tratando de ver si es nulo, e incluso si es nulo, en el programa me dice que no es null , pero más adelante en el programa, cuando estoy usando la variable, recibo una excepción diciendo que la variable es 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);

¿Qué estoy haciendo mal?

¡Solo la cuarta condición está funcionando! ¿Qué pasa con el resto (excepto el segundo, porque esa condición lo puse porque estaba desesperado)

Enseñé ID == null o ID.equals(null) estará bien, pero no.

Editar: El problema es que obtengo el valor del ID de un formulario (por ejemplo, el formulario 1). Pero en este caso, estoy usando el formulario 2 que no tiene ninguna entrada de ID, por lo que el ID debe ser null y no "null"


Como obtiene la cadena de un servlet, puedo decir que esto es normal.

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

Obviamente, la cadena que recupera no es un valor nulo, pero es una cadena de 4 caracteres "nula"

¿Por qué no pruebas la depuración? O simplemente mira qué devuelve esto:

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

Editar: Si no obtiene una excepción aquí, esto significa que la cadena no es nula y también la salida "Longitud de ID: 4" significará que la cadena es realmente ID = "nulo"

EDIT2: Bien, parece que algunos tipos no entienden lo que está sucediendo aquí y dicen ¿cómo puede una cadena nula ser "nula" en algunas condiciones en Java? Lo encuentran ridículo. Prefiero que prueben esto en Java:

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

La salida será "hellonull" Nada más ...

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


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


Si el resultado fue realmente nulo, entonces

ID == null

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

Deberías usar .equals al comparar cadenas en lugar de usar == Este blog explica más sobre él: http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

Por lo tanto, "nulo" no es nulo, en Java.


Si el valor de su ID de variable es el literal de cadena "nulo", entonces supongo que hay un error anterior en el código cuando lo recupera utilizando el método getParameter (). Según los documentos, se supone que el método getParameter () devuelve null (la referencia nula) si no hay ningún valor para el nombre especificado. Esto indica que en algún lugar se está realizando una operación que convierte el resultado al literal de la cadena, tal vez concatenando con la cadena vacía (es decir, ID + "";)


Si el valor procede de un servlet, es muy probable que el contenedor convierta un campo de formulario vacío en una cadena en blanco. Debe hacer un chequeo contra nulo y en blanco ("").

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

Alternativamente, puede usar el método String''s isEmpty() :

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


ID.equals("null")

Claramente, ID contiene la cadena de cuatro letras "null" . Entonces no es null (el valor de "nada").

Vea el glosario de Java 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. Sin embargo, la cadena "null" es un objeto, a saber, una instancia de la clase String , y en este caso la variable ID referencia a este objeto.

(Tenga en cuenta que, por convención, las variables de Java comienzan con una letra minúscula, y los acrónimos, como ID, se escriben en minúsculas, por lo que se escribe id lugar de ID ).