Tipos primitivos
Java tem oito tipos de dados internos, referidos como os tipos primitivos de Java. Estes oito tipos de dados representam os blocos de construção para objetos Java, porque todos os objetos Java são apenas coleção complexa desses tipos de dados primitivos. O exame assume que você é bem versado nos oito tipos de dados primitivos, seus tamanhos relativos e o que pode ser armazenado neles.
A Tabela 1.1 mostra os tipos primitivos Java junto com seu tamanho em bytes e o intervalo de valores que cada um possui.
Há muitas informações na Tabela 1.1. Vamos ver alguns pontos principais:
■ float e double são usados para valores de ponto flutuante (decimal).
■ Um float requer que a letra f siga o número para que Java saiba que é um float.
■ byte, short, int e long são usados para números sem pontos decimais.
■ Cada tipo numérico usa o dobro de bits do tipo similar menor. Por exemplo, O short usa o dobro de bits do byte.
Você não será perguntado sobre os tamanhos exatos da maioria desses tipos. Você deveria saber que um byte pode conter um valor de -128 a 127. Então, não fique preso memorizando isso, vamos ver como o Java obtém isso. Um byte são 8 bits. Um bit tem dois valores possíveis. (Estas são definições básicas de ciência da computação que você deve memorizar.) 28 é 2 × 2 = 4 × 2 = 8 × 2 = 16 × 2 = 32 × 2 = 64 × 2 = 128 × 2 = 256. Como 0 precisa ser incluído no intervalo, o Java coloca o zero do lado positivo. Ou se você não gosta de matemática, pode somente memorizá-lo.
O número de bits usado pelo Java quando ele determina quanta memória reservar para sua variável. Por exemplo, o Java aloca 32 bits se você escrever isto:
Qual é o maior valor de int?
Você não precisa saber disso para o exame, mas o número máximo que um int pode ter é 2.147.483.647. Como nós sabemos disso? Uma maneira é ter o Java nos dizendo:
System.out.println(Integer.MAX_VALUE);
O outro caminho é com matemática. Um int tem 32 bits. 232 é 4,294,967,296. Divida isso por 2 e você obtém 2.147.483.648. Então subtraia 1 como fizemos com bytes e você obtém 2.147.483.647. É mais fácil pedir que o Java imprima o valor, não é?
Há mais algumas coisas que você deve saber sobre primitivos numéricos. Quando um número está presente no código, é chamado literal. Por padrão, o Java assume que você está definindo um valor int com um literal. Neste exemplo, o número listado é maior do que o que cabe em um int. Lembre-se de que não é esperado que você memorize o valor máximo de um int. O exame o incluirá na pergunta se surgir.
long max = 3123456789; // DOES NOT COMPILE
Java reclama que o número está fora do intervalo. E é - para um int. No entanto, nós não temos um int. A solução é adicionar o caractere L ao número:
long max = 3123456789L; // now Java knows it is a long
Alternativamente, você pode adicionar um l minúsculo ao número. Mas por favor use o maiúsculo L. O l minúsculo se parece com o número 1.
Outra maneira de especificar números é mudar a “base”. Quando você aprendeu a contar, você estudou os dígitos 0-9. Este sistema de numeração é chamado de base 10, uma vez que existem 10 números. Também é conhecido como o sistema numérico decimal. Java permite que você especifique dígitos em vários outros formatos:
■ octal (dígitos 0 a 7), que usa o número 0 como prefixo - por exemplo, 017
■ hexadecimal (dígitos 0 a 9 e letras A a F), que usa o número 0 seguido de x ou X como um prefixo - por exemplo, 0xFF
■ binário (dígitos 0–1), que usa o número 0 seguido de b ou B como um prefixo - por exemplo, 0b10
Você não precisará converter os sistemas numéricos no exame. Você terá que reconhecer valores literais válidos que podem ser atribuídos a números.
Convertendo de volta para binário
Embora você não precise converter os sistemas numéricos no exame, analisaremos um exemplo caso você esteja curioso:
System.out.println(56); // 56
System.out.println(0b11); // 3
System.out.println(017); // 15
System.out.println(0x1F); // 31
Primeiro nós temos nosso valor normal de base 10. Nós sabemos que você já sabe ler isso, mas fique com a gente. O dígito mais à direita é 6, portanto, "vale" 6. O segundo dígito mais à direita é 5, então vale 50 (5 vezes 10). Somando isso juntos, obtemos 56.
Em seguida, temos o binário ou a base 2. O dígito mais à direita é 1 e “vale” 1. O segundo a
O dígito mais à direita também é 1. Nesse caso, "vale" 2 (1 vez 2) porque a base é 2. Somando isso juntos, obtemos 3.
Em seguida, vem octal, ou base 8. O dígito mais à direita é 7 e "vale" 7. O segundo dígito mais à direita é 1. Neste caso, vale "8" (1 vez 8) porque a base é 8. Somando isso junto, obtemos 15.
Finalmente, temos hexadecimal ou base 16, que também é conhecido como hex. O dígito mais à direita "vale" F e isto vale "15" (9 vale "9", A vale "10", B vale "11" e assim adiante). O segundo dígito mais à direita é 1. Nesse caso, "vale" 16 (1 vez 16) porque a base é 16. Somando isso juntos, obtemos 31.
A última coisa que você precisa saber sobre literais numéricos é um recurso adicionado no Java 7. Você pode ter sublinhados em números para facilitar a leitura:
int million1 = 1000000;
int million2 = 1_000_000;
Preferimos ler o último porque os zeros não estão juntos. Você pode adicionar sublinhados em qualquer lugar, exceto no início de uma literal, no fim de uma literal, antes de um ponto decimal, ou logo depois de um ponto decimal. Vamos ver alguns exemplos:
double notAtStart = _1000.00; // DOES NOT COMPILE
double notAtEnd = 1000.00_; // DOES NOT COMPILE
double notByDecimal = 1000_.00; // DOES NOT COMPILE
double annoyingButLegal = 1_00_0.0_0; // this one compiles