O que realmente retorna System.in.read?

O que :

System.in.read() 

Retorna ? A documentação diz:

Retorna: o próximo byte de dados ou -1 se o final do stream for atingido.

Mas por exemplo, se eu entrar: 10 eu volto 49 . Por que é que ?

49 é o valor ASCII do char 1 . É o valor do primeiro byte.

O stream de bytes que é produzido quando você insere 1 0 Enter no seu console ou terminal contém os três bytes {49,48,10} (no meu Mac, pode terminar com 10,12 ou 12 em vez de 10, dependendo do seu sistema ).

Então a saída do trecho simples

 int b = System.in.read(); while (b != -1) { System.out.println(b); b = System.in.read(); } 

depois de entrar um 10 e bater entrar, é (na minha máquina)

 49 48 10 

System.in.read() lê apenas um byte .

49 é o valor do ponto Unicode para 1 .

Tente imprimir:

System.out.println((char)49);

Isso ajudará você a entender mais.

Quando você digita 10 , ele não é lido como um inteiro, mas como uma String ou, mais precisamente aqui, uma matriz de bytes.

49 é o código ASCII para o caractere 1 .