Na versão 7 do Java, além de representar número decimais, hexadecimais e octais, podemos representar números binários e separar os dígitos com underscore (_).
Pontos importantes:
- O underscore não pode aparecer imediatamente após 0x, 0X , 0b ou 0B
- O underscore não pode aparecer antes do primeiro dígito e nem após o último dígito
- Um número binário começa sempre com 0B ou 0b e só aceita valores 0 e 1 (binário, duh! :D)
- A utilizar o P, p , E ou e para representação com expoente (binário e decimal), pode-se utilizar underscore, mas seguindo a regra 2 para o expoente.
Exemplo de números válidos:
int n1 = 1234_5678; long n2 = 1_2_3_4__5_6_7_8L; int n3 = 0b0001_0010_0100_1000; double n4 = 3.141_592_653_589_793d; // PI double n5 = 0x1.ffff_ffff_ffff_fP1_023; // Double.MAX_VALUE
Exemplo de números inválidos
int n6 = _1234; int n7 = 0x_1234; int n8 = 1234_; int n9 = 0x1.0_p_-1022; int n10 = 0b12;
A linha 1 quebra a regra 2, pois está iniciando com underscore. A linha 2 quebra a regra 1, pois o inderscore está logo após o 0x. A linha 3 quebra a regra 2 pois o underscore está após o último dígito. A linha 4 quebra a regra 2 e a regra 4, pois o underscore está após o último dígito e antes do primeiro do expoente. A linha 5 quebra a regra 3, pois aparece o número 2 que não faz parte dos números binários.
Essa alteração no Java 7 ajuda na legibilidade do código, principalmente para trabalhar com valores grandes (p. ex: 1_000_000_000 - um bilhão) ou com números binários.