O tipo char: armazenando e representando caracteres

O tipo de dado char serve para armazenar um caractere (o char vem de character, que é caractere em inglês), e por essa função simples tem o tamanho do tipo short.

Naturalmente vem a pergunta, para que armazenar só um caractere?
Se há tipos para armazenar números, strings e textos, o que vamos fazer com um caractere?

Onde usamos o tipo char?

"Pressione S para sim ou N para não"
"Pressione alguma tecla para para continuar..."

Ou em jogos...nunca notou que no counter-strike que para ir para o lado esquerdo basta pressionar uma das setas (ou 'a' ou 'd').
E para o Mário Bros pular ou soltar o fogo?

Muitas vezes não precisamos de um arquivo de texto inteiro ou string, mas de simplesmente um caractere.

Declaração

 char nome_do_char = 'a';

onde poderíamos substituir 'a' por qualquer caractere alfanumérico, caso tenhamos declarado assim.
Sim, podemos declarar de outra maneira. Os caracteres podem ser representados por inteiro também.

char letra_J = 74;
char letra_P = 80;

E dentro do printf, representamos o char por %c, para efeitos de formatação.
Vamos imprimir as iniciais do site, veja:

public class Tipos {
    public static void main(String[] args){
        char letra_J = 74;
        char letra_P = 80;
        System.out.printf("%c %c\n",letra_J, letra_P);
    }

}

run:
J P
BUILD SUCCESSFUL (total time: 0 seconds)


Mas como eu adivinhei que 'J' é 74 e 'P' é 80? Qual a Matemática ou magia pra saber isso?
Tabela ASCII, que são uma forma universal de representação do caracteres por meio de números, seja decimal, hexadecimal ou octal.
Esses números são a representação decimal dos caracteres, confira a tabela abaixo:

Apostila de Java grátis


Na verdade, essa representação é humana. Para diversos tipos de numeração.
Existe extensão dessa tabela para os chineses, para os indianos e outros povos com diferentes caracteres. E pros computadores?
Computador é macho, pra ele é tudo número, é tudo bit!
Representação é coisa humana.

Misturei tudo, veja só:



public class Tipos {
    public static void main(String[] args){
        int numero_J = 74;
        char letra_J = (char) numero_J;
        char letra_P = 80;
                char letra_i = 'i';
        System.out.printf("%c%c%c%c %c%c%c%c%c%c%c%c%c%c%c\n",
                                    letra_J,97,118,97, letra_P, 'r',
                                    111,103,114,101,'s','s',letra_i,
                                    118, 111);
    }

}

Não poderíamos simplesmente igualar um char a um inteiro:
letra_J = numero_J

Então fizemos um cast: char letra_J = (char) numero_J;
Que nada mais é que dizer ao Java para representar o próximo tipo de uma outra forma.
No caso, estamos dizendo 'Hey, Java, brother, não veja o numero_J como inteiro, veja como char. Eu sei que declarei como char, mas é só dessa vez, ok?'.

Para ver mais caracteres e magias numéricas:
http://www.asciitable.com/
http://www.tamasoft.co.jp/en/general-info/unicode.html
http://pt.wikipedia.org/wiki/ASCII

Como armazenar um caractere (char) que o usuário digitou

Usamos, obviamente, a classe Scanner para receber um caractere do usuário.
Porém, há uma pequena diferença. Usaremos o método 'nextLine()' que recebe uma string do usuário, porém como queremos um caractere, usaremos o 'charAt(0)' para receber apenas um caractere (ou o primeiro elemento da string).
Veja como se faz:

Scanner entrada = new Scanner(System.in);
char caractere;

caractere = entrada.nextLine().charAt(0);

Dicas e Novidades de Java por e-mail

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.