Pregunta

En Java, se podría decir que por lo general

if(someBool != false)

es el mismo que

if(someBool)

Pero lo que si someBool no es del tipo boolean pero Boolean, y su valor es null?

¿Fue útil?

Solución

Se lanzará un NullPointerException ( autounboxing null de tiros NPE).

Pero eso sólo significa que no se debe permitir que un valor null. O bien utilizar un defecto, o no utilice autounboxing y realizar una prueba de que no sea nulo. Debido a que el uso de un valor de un medio null booleanas que tiene 3, no 2 valores. (Mejores maneras de manejar que se propuso por Michael y Tobiask)

Otros consejos

Si desea manejar casos Boolean así como primitivas y será nula de fallos, puede utilizar lo siguiente:

if(Boolean.TRUE.equals(someBool))

Uso Apache Commons BooleanUtils.isTrue () o .isFalse ()

Si se someBool Boolean

if (someBull != null && someBull) {
  //Yeah, true.
}

Desde booleana puede ser null asegúrese de evitar NullPointerException mediante la comprobación de que no nulo.

Me hice una pequeña prueba:

    Boolean o = null;
    try {
        System.out.println(o ? "yes" : "no");
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        System.out.println((o != false) ? "yes" : "no");
    } catch (Exception e) {
        e.printStackTrace();
    }

La salida es sorprendente:

java.lang.NullPointerException
    at btest.main(btest.java:10)
java.lang.NullPointerException
    at btest.main(btest.java:15)

El primer NPE es de esperar, porque o se autounboxed (y que no porque es nulo). El segundo pasa por la misma razón, pero no se siente natural. De todos modos, la solución es hacer:

System.out.println(!Boolean.FALSE.equals(o) ? "yes" : "no");

Sin embargo se puede comparar un valor nulo de Boole con una instancia de Boole. Por ejemplo:

Boolean myBool = null;
System.out.println(myBool == Boolean.FALSE);
System.out.println(myBool == Boolean.TRUE);

impresiones:

false
false

Los buenos ejemplos de la diferencia entre la primitiva boolean & el objeto booleano . El primero puede ser solamente true o false . Este último puede ser true , false o desconocido / indefinido . (Es decir, null). Que se utiliza depende de si se quiere tratar con dos casos de uso o tres.

Es viejo, pero es Boolean.valueOf(null) false, al igual que Boolean.valueOf(false) es false.

En realidad el constructor de Boole acepta nulo, devuelve falso y no lanza un NullPointerTantrum.

 new Boolean(null);
 <false>

Esto tiene la ventaja añadida de que también da una respuesta a la thruthy "true" cadena que no es el caso para Boolean.TRUE.equals pero estamos más restringido de nuevo tener sólo constructores para cuerdas y booleanos.

Algo que puede superar con la concatenación de cadenas, que también es nula a prueba.

 new Boolean(""+null);
 <false>

 new Boolean(""+false);
 <false>

 new Boolean(""+new Object());
 <false>

 new Boolean(""+6);
 <false>

 new Boolean(""+new Integer(9));
 <false>

Asegurar que todas las opciones disponibles en TRUE, Java, todavía permanece.

 new Boolean(""+true);
 <true>

 new Boolean(""+"true");
 <true>

Si se trata de Java 7+ puede utilizar

import java.util.Objects;

y

if (Objects.equals(someBool, true))

As Boolean le dará un objeto, siempre hay que comprobar NULL antes de trabajar en el objeto

Si su nula entonces obtendrá una NullPointerException

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