"Amigo, eu invejo você. Aprender coisas novas é tão maravilhoso! E hoje um tópico novo e interessante espera por você - literais."

"Aparentemente, devo dizer que sou o aluno-robô mais feliz do planeta, Rishi. Bem, estou pronto para absorver o novo conhecimento!"

"Vamos direto ao assunto então. Literais são dados específicos escritos diretamente no código de um programa. Não estamos falando de qualquer dado. Estamos falando apenas de tipos primitivos e Strings.

Por exemplo, suponha que você tenha este código:

Código Literais
int a = 5;
int b = a + 10;
String s = "Sum=" + (a + b);
5
10
"Sum="

"Os literais neste código são o número 5 , o número 10 e a string ' Soma = '.

Literais inteiros

"Em Java, tudo, incluindo literais, tem um tipo. Todos os literais inteiros (inteiros) no código são ints . O tipo int é o tipo inteiro Java padrão."

"Eu conheço esse tipo. Já usei."

"Você se lembra de outros tipos inteiros além de int? Alguns que ocupam menos espaço na memória?"

"Claro! Byte e curto."

"São esses. Portanto, se no seu código você decidir atribuir um literal inteiro a uma variável do tipo byte ou short, não haverá problemas. O principal é que o valor do literal esteja dentro da faixa de valores que o tipo de variável pode armazenar. O compilador Java é inteligente o suficiente para entender que uma variável de byte pode receber o literal inteiro 100.

Exemplos:

Código Descrição
int a = 300;
Isso irá compilar muito bem.
byte a = 100; 
Isso irá compilar muito bem.
byte a = 300; 
Haverá um erro de compilação, porque o valor máximo do byte é 127.

"E quanto ao tipo longo ?"

"Também podemos escrever literais desse tipo em nosso código. Para fazer isso, adicione a letra latina 'L' ou 'l' no final do inteiro.

Exemplos:

Código Descrição
long a = 3000000000L; 
Isso irá compilar muito bem.
long a = 3000000000; 
Erro de compilação: 3 bilhões é muito grande para um literal int.
int a = 3000000000L; 
Erro de compilação: o literal é longo, mas a variável é um int. Além disso, 3 bilhões é mais do que o int máximo.

"Você notou como é difícil ler grandes números de 10 ou mais dígitos?

"Sim, se você não tiver seu robovision ativado, não ficará imediatamente claro se estamos falando de 3 bilhões ou 30."

"Para tornar o código mais legível (e isso é importante!), Java permite a inserção de sublinhados em literais numéricos (eles não afetam o valor do número).

"O exemplo acima pode ser reescrito com sublinhados para torná-lo um pouco mais claro:

Código Descrição
long a = 3_000_000_000L; 
Isso irá compilar muito bem.
long a = 3_000_000_000; 
Erro de compilação: 3 bilhões é muito grande para um literal int.
int a = 3_000_000_000L; 
Erro de compilação: o literal é longo, mas a variável é um int. Além disso, 3 bilhões é mais do que o int máximo.

"Isso é muito mais conveniente de ler, embora uma vírgula em vez de um sublinhado seja mais familiar!"

"Mas não podemos usar vírgulas em literais numéricos porque elas já são usadas para outra finalidade. Por exemplo, para separar argumentos uns dos outros ao chamar um método.

Literais de números reais

"Você provavelmente já adivinhou que em seu código pode especificar não apenas números inteiros, mas também literais de ponto flutuante (números reais)."

"Duplos e floats?"

"Sim. Na verdade, a regra é bem simples: se um número no código tiver um ponto decimal, então o número é um literal de ponto flutuante. E não qualquer literal, mas um literal duplo. Para criar um literal flutuante , você precisa colocar a letra 'F' (ou 'f') no final do número .

Exemplos:

Código Descrição
double a = 100.0; 
Isso irá compilar muito bem.
double a = 100.;
Isso irá compilar muito bem.
double a = .0;
Isso irá compilar muito bem.
float a = 100.0f; 
Isso irá compilar muito bem.
float a = 100.0; 
Haverá um erro de compilação: a variável é float, mas o literal é double.

"A propósito, você pode converter explicitamente um literal inteiro em um float ou double literal simplesmente acrescentando o sufixo 'F' (para float ) ou D (para double ). Exemplos:

Código Descrição
double a = 100D; 
Isso irá compilar muito bem.
float a = 100F; 
Isso irá compilar muito bem.
int a = 300D; 
Haverá um erro de compilação: a variável é um int, mas o literal é um double .

"Os literais de ponto flutuante podem usar notação científica : além da parte com sinal do número, você também pode especificar uma potência de dez. Exemplo:

Literal notação matemática valor final
1.23 E 2 1,23*10 2 123,0
1.23 E 3 1,23*103 1230,0
1.23 E -6 1,23*10 -6 0,00000123
1 E 6 1,0 *10 6 1000000,0
1 E -10 1,0*10 -10 0,0000000001

Literais de string

"Você também pode especificar linhas inteiras de texto em seu código. Para dizer ao compilador para tratar uma string como dados (um literal) e não como parte do código, a string inteira é cercada por aspas duplas em ambos os lados.

"Se uma única linha de código tiver várias aspas duplas, elas serão divididas em pares. A primeira aspa dupla indica o início de um literal. A próxima indica o fim do literal. A próxima depois disso mais uma vez marca o início de um novo literal. E o próximo marca o fim do segundo literal. E assim por diante.

"Cada literal é uma String .

Exemplos

Código Explicação
"+"+"+"+"+"+"+"+"+"
Existem 5 literais em uma linha. Cada um deles consiste em um único caractere '+'
""
Este literal é uma string vazia. Uma string sem caracteres.
"2+3"+"-5"
Existem dois literais aqui. O resultado será a string '2+3-5', não um número
"return"+";"
Há também dois literais aqui. Não há declaração de retorno aqui.

"Se uma string literal for muito longa, ela pode ser dividida em várias linhas e colada com o 'operador de adição':

Código Explicação
String s = "I hold it true, whate'er befall"
         + "I feel it when I sorrow most;"
         + "'Tis better to have loved and lost"
         + "Than never to have loved at all.";
Se você enviar esta linha para a tela, todo o texto será exibido em uma única linha!

Literais de caracteres

"E se eu precisar de um literal que seja um único caractere em vez de uma string? Devo criar uma string que consiste em um único caractere?"

"Não, nesse caso você precisa de um literal cujo tipo seja char. Você consegue adivinhar como o início e o fim de tal literal são designados?"

"Aspas simples?"

"Sim, e dentro das aspas simples deve haver um caractere e apenas um caractere. Você não pode usar aspas simples vazias.

Exemplos:

Código Explicação
'A'
Um literal cujo tipo é char. Ele contém a letra latina 'A'.
'@' 
Um literal cujo tipo é char. Contém o símbolo '@'
'' 
Um literal cujo tipo é char. Ele contém um caractere japonês. E isso também é possível.
'\u1f3a'
Um literal cujo tipo é char. Ele contém um caractere Unicode especificado por seu número.

"O último exemplo atribui um caractere Unicode usando uma notação especial: primeiro temos o prefixo \u, seguido por 4 caracteres hexadecimais. Você aprenderá mais sobre isso nas próximas lições."