Número Hex x Octal

Iniciei o estudo para a certificação.

Estou utilizando o livro Java 2 - Sun Certified Programmer & Developer for Java 2 de Kathy Sierra e Bert Bates.

Como era de se esperar, surgiram as primeiras dúvidas:

No livro tem o seguinte:

char a = 0x892; // octal literal

Pelo que entendi, números octais sempre começam com 0 (zero). E números hexa, começam com 0x (zero xis).

Se eu estiver correto, por que esse número 0x892 é octal?

2 - Como diferenciar um número decimal que começa com 0 (zero) de um octal? Existe algo como para os números hex (0x)? É uma convenção para os números que inicial com 0 (zero) sempre serem octais?

Estou utilizando a versão em inglês

Caro Daniel,

O livro deve estar errado, essa é um hexadecimal literal, mesmo porque não existe as literais 8 e 9 em octal:

0, 01, 02, 03, 04, 05, 06, 07, 010, 011, etc…

De acordo com a JLS (Java Language Specification) há um erro no seu livro.

Todos os números que começam por zero e não têm um ponto, ou um x, são octais.

Exemplos:

07 --> octal
08 --> inválido (Erro de compilação: "integer number too large: 08"
08.7 --> ok (decimal, constante double)

Muito obrigado pelos esclarecimentos.