2010-01-17 20 views
5

como sabemos en las variables java son titulares de bit con un tipo designado. Y para las primitivas, los bits representan un valor numérico.patrón de bits (valor variable) para booleano en java?

Por ejemplo. un byte con valor 6 tiene un patrón de bits 00000110.

así que quería saber como boolean también es una primitiva cuál es el patrón de bits para los valores verdaderos y falsos.

+0

Tengo curiosidad acerca del posible uso que esperas de la respuesta. –

Respuesta

6

Internamente en el bytecode/VM booleanos se representan como bytes con los patrones de bits 00000001 para true y 00000000 para falso. Pero esa información no le compra nada como desarrollador de Java, ya que simplemente no puede acceder o usar la represión numérica de los booleanos en Java, ya que Java los separa estrictamente de los números.

Editar: Acabo de buscar el Java VM Spec de nuevo y descubrí que mi respuesta era incorrecta. Al contrario de lo que dije antes, los booleanos se almacenan como estructuras CONSTANT_Integer en código de bytes que los hace ocupar 4 bytes para los datos en el conjunto constante, pero como el conjunto constante está unificado, puede haber como máximo 2 entradas booleanas en cualquier clase. Y dado que una referencia al conjunto constante siempre tiene 2 bytes de ancho, una matriz de booleanos ocuparía 2 bytes por entrada en el código de bytes.

3

Sí, como skaffman dijo: Cierto es 1 y falso es 0.

Pero eso no importa, porque a menos que nos fijamos en los datos serializados fuera de su programa, es poco probable que alguna vez ver esos valores En la naturaleza.

Por si vale la pena, las implementaciones Java comunes realmente almacenan booleanos en campos de tamaño entero, es decir, tienen un valor de relleno de 31 cero alrededor de ese único bit de información. Acceder a 32 bits a la vez es un poco más rápido que tomar un byte de 4, y mucho más rápido que extraer un bit de un byte. Sin embargo, esta optimización hace que las matrices de booleanos sean molestamente grandes. Si tiene que lidiar con muchos, muchos bits y necesita reducir el espacio, es mejor que use BitSet.

2

Si no me equivoco, la especificación JVM no ordena cómo los valores booleanos deben representarse internamente. La forma en que se representa el valor internamente es específico del proveedor y no le importa al programador, ya que este detalle es totalmente transparente para los programas que se ejecutan en la JVM.

+0

Probablemente estés en lo correcto. Pero, ¿qué sucede cuando entran en juego la serialización y la comunicación entre las JVM? Independientemente de cómo se representen los valores internamente, debe haber un estándar vinculante que permita a las diferentes JVM reconocer los valores booleanos (y otros) de los demás, ¿no? –

+0

ese es un punto interesante Carl. tiene que haber algún estándar vinculante como usted dijo ... pero me temo que no puedo comentar sobre eso ... No sé – Aadith

+0

No, no es específico del proveedor - falso es 0, verdadero es 1. Ejemplo: compilar esta clase, descompilarlo con javap -p -c: class Test {boolean t() {return true;} boolean f() {return false;}} –

Cuestiones relacionadas