Um literal primitivo é meramente uma representação dos tipos de dados primitivos, ou seja, um inteiro, número ponto-flutuante, boolean, ou um caracter que você insere no código. Exemplos:
'b' // literal char
42 // literal int
false // literal boolean
2546789.343 // literal double
Literais inteiros
Há três formas de representar números inteiros em Java: decimal (base 10), octal (base 8), e hexadecimal (base 16). A maioria de perguntas do Exame com literais inteiro usam representações decimais, mas as poucas que usam octal ou o hexadecimal valem a pena estudar. Mesmo que as probabilidades de você usar números octais no mundo real seja astronomicamente pequenas, foram incluídas no Exame apenas para o seu divertimento (o que falar então de hexadecimal?).
Literal decimal
Os inteiros decimais não precisam de nenhuma explicação porque você os usa desde a mais tenra idade. Em Java são representadas do jeito que se conhece, como se segue:
int length = 343;
Literal Octal
Inteiros octais usam somente os dígitos de 0 a 7. Em Java, você representa um inteiro octal colocando um zero na frente do número, como no exemplo:
class Octal {
public static void main(String [] args) {
int five = 06; // igual ao decimal 6
int seven = 07; // igual ao decimal 7
int eight = 010; // igual ao decimal 8
int nine = 011; // igual ao decimal 9
System.out.println("Octal 010 = " + eight);
}
}
Observe que o próximo número na seqüência após o 7 (que seria o 8 no decimal) é o 10, ou seja, volta para zero e acrescenta o 1 à esquerda, similar ao 10 após o 9 em decimal. Como limite de tamanho você pode ter até 21 dígitos em octal. Se você rodar o programa anterior vai aparecer o seguinte:
Octal 010 = 8
Literal hexadecimal
Números hexadecimais (ou hex/hexa para os íntimos) são constituídos usando 16 símbolos distintos. Como nunca foi inventado símbolos para os números de 10 a 15, usamos os caracteres alfabéticos para representá-los. Assim, os números de 0 a 15 em hexa são esses:
0 1 2 3 4 5 6 7 8 9 a b c d e f
O Java aceita tanto letras maiúsculas quanto minúsculas (um dos poucos lugares onde o Java não é case-sensitive). É permitido até 16 dígitos em um número hexa, não incluindo o prefixo 0x ou o sufixo de extensão opcional L, que será explicado depois. Todas as assinaturas hexadecimais abaixo são permitidas:
class HexTest {
public static void main (String [] args) {
int x = 0X0001;
int y = 0x7fffffff;
int z = 0xDeadCafe;
System.out.println("x = " + x + " y = " + y + " z = " + z);
}
}
Rodando essa classe temos a seguinte saída:
x = 1 y = 2147483647 z = -559035650
Não se preocupe com mudanças no dígito x precedente (0X ou 0x). 0XCAFE e 0xcafe são iguais e válidos. Todos os três literais inteiros (octal, decimal, e hexadecimal) são definidos como int por default, mas você pode especificar um tipo long por exemplo colocando o sufixo L ou l após o número:
long jo = 110599L;
long so = 0xFFFFl; // Note a caixa baixa 'l'