type long float example data java boolean primitive-types

float - long java max value



¿Cuál es la diferencia entre false y Boolean.FALSE? (8)

En C ++ windows.h FALSE se define como un entero, lo cual tiene sentido para algunos casos de lógica especial, pero en Java java.lang.Boolean.FALSE se define como booleano y se asigna a falso
public static final Boolean FALSE y he visto a algunas personas usarlo.

Mi pregunta: ¿hay una diferencia de rendimiento entre false y Boolean.FALSE ? en general ¿por qué la gente va y Boolean.FALSE ?


Consulte http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html .

Boolean.TRUE y Boolean.FALSE no son boolean , son Boolean . Son instancias estáticas de los dos objetos envoltorios Boolean que corresponden a los valores boolean true y false .

Boolean es similar a una enum . Las instancias TRUE y FALSE son las instancias devueltas por Boolean.valueOf() .

En cuanto al rendimiento de primitivo vs. envoltorio; no hay ninguna diferencia por la que deba preocuparse. Las instancias estáticas TRUE y FALSE ayudan un poco al rendimiento, y los javadocs recomiendan usar Boolean.valueOf() en lugar de un new Boolean(...) por ese motivo. Los valores booleanos true y false son un poco "nivel inferior", pero si los almacena en un Boolean (en lugar de boolean ) de todos modos es irrelevante.

Debe usar lo que sea más sensato para su código y lograr la mejor legibilidad (y, definitivamente, no comience a tomar el camino de pensar en las microoptimizaciones como los tipos primitivos frente a los de envoltura). Si está utilizando un valor Boolean , utilice los valores de objeto. Si está utilizando un valor boolean , utilice los valores primitivos. Si está decidiendo entre Boolean y Boolean , use lo que sea más apropiado (por ejemplo, un Boolean puede ser null , lo que puede ser útil, y también no puede usar tipos primitivos para parámetros de tipo genérico; por otro lado, un boolean nunca puede ser null que podría ser igualmente útil).

También tenga en cuenta que el boxeo automático convierte los tipos primitivos en una de esas dos instancias Boolean estáticas, por ejemplo:

Boolean a = true; assert(a == Boolean.TRUE);


Como nota aparte, como lo mencionó: FALSE se define en windows.h por dos razones: 1) Porque windows.h ha estado en uso desde los días de solo C, y C no tiene un tipo de bool nativo, y 2) Es la práctica tradicional de Microsoft definir tipos de datos y valores con tamaños y valores explícitos y conocidos, esp. para pasar datos a las funciones de la API de Windows a través de los límites de DLL (más allá del alcance de esta pregunta) y para integrarlos con otros lenguajes que tengan representaciones diferentes de "verdadero" y "falso". No tiene Boolean.FALSE relación con los motivos de Boolean.FALSE en Java.


En lo que respecta al rendimiento, Boolean.FALSE devolverá un objeto Boolean , que podría darle más flexibilidad para trabajar.

La alternativa primitiva ocupa menos memoria.


En primer lugar, si no está claro con esto, necesita saber que en Java no se pueden convertir implícitamente números booleanos, por ejemplo, no puede compilar algo como:

int a = 1; if(a){ //something, something }

En segundo lugar, algunas consideraciones sobre el rendimiento. Siempre hay una compensación.

Cuando se utiliza el tipo boolean primitivo, el rendimiento debería ser mejor porque está usando un valor directamente, que es true o false (obviamente, codificado en bytes).

Cuando se utiliza el tipo de objeto Boolean , una variable / campo mantendrá un valor, pero ese valor no se puede usar de inmediato, ya que ese valor es de hecho la referencia a un objeto, por lo que podría tener una penalización de rendimiento. Por supuesto, esta sanción no es significativa en la mayoría de los casos. Y, si desarrolla una aplicación de tiempo crítico, lo más probable es que no esté utilizando Java :). Sin embargo, el uso de tipos de objetos puede aportar algunos beneficios en el proceso de desarrollo y la seguridad en la implementación de casos de uso (por ejemplo, permite valores nulos, lo cual es crítico cuando se asignan entidades JPA a tablas relacionales y hay columnas de tipo bit que permiten valores nulos; y esto es solo un escenario donde el tipo de objeto es mejor).

Al final, tenga en cuenta el boxeo / no-boxeo, que permite a los desarrolladores utilizar variables de tipo boolean casi todas partes donde se espera una variable de tipo Boolean (y al revés).


Es una pregunta muy extraña, porque false es el valor del tipo boolean primitivo, mientras que Boolean.FALSE es una variable del tipo Boolean de referencia. Su valor es referencia al objeto de tipo Boolean cuyo estado interno booleano es false .




false es un objeto primitivo y Boolean.FALSE es un objeto, por lo que no son realmente comparables.

Si asigna false a una variable Boolean , como esto:

Boolean b = false;

El boxeo automático de Java ocurre para convertir el primitivo en un objeto, por lo que el valor false se pierde y terminas con Boolean.FALSE todos modos.

En términos de rendimiento, el uso de una variable primitiva superaría ligeramente el rendimiento de un objeto Boolean envolvente, pero su elección debe basarse en la legibilidad y en las decisiones de diseño básicas en lugar de en el "rendimiento".


Boolean a = null; if (a) { // NullPointerException } if (a != false) { // NullPointerException } // Caution, comparing by reference, meaning 2 Booleans with same value could be different if (a != Boolean.FALSE) { System.out.println("But this one works"); }