Tipo primitivo

14 respostas
E

qual é o tamanho em bits do tipo primitivo
boolean ???

Pois comparei dois livros, e um dizia que é 1 bit e outro 8 bits.

14 Respostas

S

Até onde sei são 8 bits (1 byte).

Bem, vamos tirar a dúvida na especificação da linguagem … humm, humm, interessante, hummm … sem resposta! :stuck_out_tongue:

A JLS não diz nada sobre o tamanho, ou seja, fica a critério da Virtual Machine (veja).

Os outros tipos primitivos também não são ditados pela JLS mas sim pelo que cada um deve suportar (é impossível seguindo a especificação usar 8 bits para representar um short).

espero ter ajudado,

[]s

U

só para completar, em uma maquina X86, é muito dificil alguma linguagem utilizar apenas um bit para o tipo de dados boolean, ja que a arquitetura não disponibiliza instruções para acesso a um bit, isto só é possivel por mascaramento de um byte :slight_smile:
inclusive no C++ o tipo bool ocupa um byte :slight_smile:

bom, a não se que meu assembly esteja mais enferrujado do que eu pensei :slight_smile:

L

Que eu sei esses são os tamanhos de todos os tipos primitivos do JAVA

boolean - 1 bit
byte - 8 bits - 1byte
short - 16 bits - 2 bytes
char - 16 bits - 2 bytes
int - 32 bits - 4 bytes
float - 32 bits - 4 bytes
long - 64 bits - 8 bytes
double - 64 bits - 8 bytes

U

não, o boolean, apesar de armazenar apenas true ou false, é armazenado em um byte :slight_smile:

E

No livro “Java Como programar” diz q boolean tem 8 bits, mas quando vi no livro “Complete Java2 Certificade Study Guide” diz q é 1 bit somente.

Tb procurei na especificacao, mas não encontrei nada.

U

ele tem 8 bits, que são utilizados para representar um só, pois sairia muito caro e sem vantagem nenhuma representar isto em um só bit.

S

Eu faço coro com o urubatan 8)

Em máquinas x86 é muito mais fácil trabalhar com 1 byte do que bits.

Seu assembly não esta tão enferrujado assim … acho pouco provavel que uma VM implemente um boolean de 1 bit pq alem do acesso a memoria pra pegar os 8 bytes ainda teria que fazer a manipulação.

Incrusives o Oracle (que é o que tenho mais contato) usa esse principio como otimização, ele nunca pega (nem tenta) somente os bytes das informação mas sim um múltiplo de 8.

[]s

E

Então caso caia na prova de certificação, responderei 8bits.
Vou avisar aos autores do livro Study Guide sobre este erro.

Valeu pelas respostas

C

Sem duvida ele se utiliza de um byte, mas como a JVM eh livre de Hardware nao podemos dizer com certeza se em todas as implementacoes eh assim!

Abraco,

Claudio

L

quer descobrir quantos bits a implementação da sun usa?
o teste é bem simples, nos medimos quanto de memoria 1 array de booleans ocupa.
O teste não é capas de dizer quantos bits uma variavel boolean usa, mas pelo menos quantos bits arrays de booleans usam.

public class a
{
   static {
       boolean b[] = new boolean[1024 * 1024 * 10];
   }
}

primeiro:
java -Xmx6m a
deu OutOfMemoryError
entao nao usou menos de 1 byte

depois:
java -Xmx11m a
deu NoSuchMethodError
com 8,9 ou 10mb deu OOME, estranho…

x86 tem todas instruções nescessarias pra se implementar 1 boolean com 1 bit sem precisar fazer bit masking

BS(F|R): Bit Scan (Forward|Backward)
BT: Bit Test
BT(S|C|R): Bit Test and (Set|Complement|Reset)

Pra descobrir mesmo so olhando no fonte da JVM, caso alguem esteja com boa vontade, so olhar na descrição da cpu pra x86, que é o 486 pra 1.4.0, e procurar por essas 6 instruções.
Hmm se bem que BTS deve ser utilizada com thin locks.

P

como o louds e o claudio indicaram, isso depende da implementacao
se perguntarem, a reposta eh: ele gasta 1 bit. se a minha JVM quiser guardar ele em um mega, problema eh dela.

E

Ver:
http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html#22909

S

“Paulo Silveira”:
como o louds e o claudio indicaram, isso depende da implementacao
se perguntarem, a reposta eh: ele gasta 1 bit. se a minha JVM quiser guardar ele em um mega, problema eh dela.

De acordo o link acima então a resposta são 4 bytes.

ehehe nada como ir na fonte, valeu!

B

De acordo com esse link acima, existe uma observação que em arrays
os booleans ocupam 8 bits:

http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html#24357

" In Sun’s JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in the Java programming language are encoded as Java virtual machine byte arrays, using 8 bits per boolean element."

Criado 14 de maio de 2003
Ultima resposta 22 de mai. de 2003
Respostas 14
Participantes 8