W3docs

Caracteres Java (char)

Represente caracteres individuais em Java com o primitivo char e use a classe wrapper Character para métodos utilitários.

char é um dos oito tipos de dados primitivos do Java. Ele armazena um único valor sem sinal de 16 bits — uma unidade de código UTF-16. Para a maioria dos scripts Latino, Cirílico, Grego, Árabe, CJK e muitos outros, isso cabe no caractere inteiro. Para emojis e alguns scripts menos comuns, um caractere percebido pelo usuário ocupa dois chars (um par substituto).

Esta página aborda como escrever literais char, o fato de que um char é na verdade um pequeno inteiro, a classe wrapper Character para classificação com consciência Unicode, o problema com pares substitutos e arrays char[]. Quando você se sentir confortável com caracteres individuais, a classe String é construída sobre eles.

Literais char

Um literal de caractere é um único caractere entre aspas simples:

char a = 'A';
char z = 'z';
char digit = '7';
char punct = '!';

Você também pode usar sequências de escape e escapes Unicode:

char newline = '\n';
char tab = '\t';
char quote = '\'';
char back = '\\';
char copy = '©';   // ©
char pi = 'π';     // π

char é um inteiro de 16 bits

Um valor char é, internamente, um inteiro sem sinal de 16 bits. Você pode fazer aritmética com ele e converter de/para int:

char c = 'A';
int code = c;             // 65 — implicit widening to int
char next = (char) (c + 1); // 'B'
char digit5 = (char) ('0' + 5); // '5'

O truque clássico para testar intervalos de caracteres:

boolean isUpper = c >= 'A' && c <= 'Z';
boolean isDigit = c >= '0' && c <= '9';
Aviso

Como um char é ampliado para int, 'A' + 'B' é o inteiro 131, não a string "AB". Dentro de um System.out.println("x" + c) a String à esquerda força a concatenação, mas c1 + c2 por si só é aritmética. Use o cast com (char) quando quiser um resultado de caractere.

O wrapper Character

Character é a classe wrapper. Ela possui dezenas de métodos utilitários estáticos para classificar e converter caracteres — mais confiáveis do que o estilo c >= '0' acima, pois são compatíveis com Unicode:

Character.isLetter('A');         // true
Character.isDigit('7');          // true
Character.isLetterOrDigit('é');  // true
Character.isWhitespace(' ');     // true
Character.isUpperCase('A');      // true
Character.isLowerCase('a');      // true
Character.toUpperCase('a');      // 'A'
Character.toLowerCase('A');      // 'a'
Character.getNumericValue('7');  // 7
Character.toString('A');         // "A"

Prefira os métodos de Character em vez de verificações manuais de intervalos quando puder encontrar texto não-ASCII.

Um char é uma unidade de código UTF-16, nem sempre um caractere do usuário

Esta é a parte sutil. As strings Java são UTF-16. Para caracteres com pontos de código até U+FFFF (o Plano Multilíngue Básico — a maioria dos idiomas, a maioria da pontuação), um ponto de código cabe em um char. Para caracteres acima de U+FFFF — a maioria dos emojis, scripts antigos e alguns símbolos musicais — são necessários dois chars (um par substituto).

String emoji = "🎉";
System.out.println(emoji.length());           // 2 — surrogate pair
System.out.println(emoji.codePointCount(0, 2)); // 1 — one user character

Se o seu código processa texto fornecido pelo usuário e pode encontrar emojis ou scripts raros, prefira os métodos com consciência de ponto de código (String.codePoints(), Character.toString(int), Character.isLetter(int)) em vez dos baseados em char.

char[] — arrays de caracteres

Um char[] é às vezes usado para processamento de texto sensível ao desempenho ou para senhas (você pode zerar o array após o uso, enquanto não pode zerar uma String imutável):

char[] greeting = {'H', 'e', 'l', 'l', 'o'};
String s = new String(greeting);     // "Hello"

char[] back = s.toCharArray();

Uma demonstração

java— editable, runs on the server

O que vem a seguir

Classe Math do Java — a biblioteca de métodos estáticos para aritmética que vai além de +, -, *, /.

Prática

Prática
Quais afirmações sobre char em Java estão corretas?
Quais afirmações sobre char em Java estão corretas?
Was this page helpful?